【问题标题】:Numpy random memory errorNumpy随机内存错误
【发布时间】:2015-01-19 20:34:45
【问题描述】:

您好,我有一条简单的线可以为相当大的数据集创建一个随机数组:

import numpy as np
import random
N=276233
L=138116

np.random.random([L,N])

但我得到这个错误:

Traceback (most recent call last):
  File "<string>", line 3 (23), in <module>
  File "mtrand.pyx", line 760, in mtrand.RandomState.random_sample (numpy\random\mtrand\mtrand.c:5713)
  File "mtrand.pyx", line 137, in mtrand.cont0_array (numpy\random\mtrand\mtrand.c:1300)
MemoryError

解决方案是什么,数组的极限是多少?

【问题讨论】:

  • 如果你可以使用更小的整数类型而不是双精度类型,你可以减少相当多的内存占用。但是,根据您的分析/数据的目标,这可能是不可能的。

标签: python memory numpy


【解决方案1】:

您正在尝试创建一个需要 284GB 内存的数组:

In [16]: L * N * 8 / (1024. ** 3)
Out[16]: 284.25601890683174

要么购买更多的 RAM(并确保您的系统可以处理它),要么找到一种不必生成 276,233x138,116 矩阵的方法。

【讨论】:

  • 嗯...你是怎么得到 284GB 这个数字的?我有 N*L=3.81x10^10 bits / 8 bits/Byte = 4.7GB 吗?我错了吗?
  • 276233 * 138116 * 8 / (1024 ^ 3)。每个双精度使用 8 个字节。
  • 啊,好的,谢谢!我以为每个都有点。 :( 我想我不能将这种方法用于需要随机矩阵的大型数据集...
  • @Arbitel:你确定需要一次生成整个矩阵吗?
  • 回到我之前发布的这个问题:stackoverflow.com/questions/28015281/numpy-optimization 我基本上不得不比较相邻的元素。之后,我将不得不进行逐行求和。我想我必须这样做?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多