Numpy内存错误

时间:2016-03-22 18:43:15

标签: python numpy out-of-memory

我遇到numpy的内存错误问题。以下代码行似乎是问题所在:

self.D_r = numpy.diag(1/numpy.sqrt(self.r))

其中self.r是一个相对较小的numpy数组。

有趣的是我监视了内存使用情况,并且该进程占用了机器上最多3%的RAM。所以我认为在所有RAM被占用之前有一些东西会杀死脚本,因为期望这个过程会这样做。如果有人有任何想法我会非常感激。

修改1:

这是追溯:

Traceback (most recent call last):
File "/path_to_file/my_script.py", line 82, in <module>
mca_X = mca.mca(X)
File "/path_to_file/mca.py", line 54, in __init__
self.D_r = numpy.diag(1/numpy.sqrt(self.r.values))
File "/path_to_file/numpy/lib/twodim_base.py", line 302, in diag
res = zeros((n, n), v.dtype)
MemoryError

在KDD Cup 99数据上运行脚本(使用单热编码的名义变量)。

2 个答案:

答案 0 :(得分:0)

如果np.diag()的参数是1D,它会创建一个2D数组,使用1D数组作为对角线:

  

签名:np.diag(v,k = 0)

     

参数

 v : array_like
   If `v` is a 2-D array, return a copy of its `k`-th diagonal.
   If `v` is a 1-D array, return a 2-D array with `v` on the `k`-th
   diagonal.

这会对数组的内存大小进行平方。

答案 1 :(得分:0)

如果self.r是超过51000个的1D 小数组,则会产生内存错误:

In [85]: a=np.diag(arange(5e4))

In [86]: a.shape
Out[86]: (50000, 50000)

In [88]: a.size*a.itemsize
Out[88]: 20 000 000 000 # 20 Go

In [87]: a=np.diag(arange(5.1e4))
---------------------------------------------------------------------------
MemoryError