我遇到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数据上运行脚本(使用单热编码的名义变量)。
答案 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