试图通过Numpy Ndarray对象求和时Python中的内存错误
我有一个巨大的numpy ndarray(称为试图通过Numpy Ndarray对象求和时Python中的内存错误,python,numpy,matrix,scipy,multidimensional-array,Python,Numpy,Matrix,Scipy,Multidimensional Array,我有一个巨大的numpy ndarray(称为mat,形状为700000 x 6000),我想通过这些列求和,找到非零索引 我想这样总结一下: x = np.sum(mat[:,y], axis=1) indices = np.nonzero(x) 但是第一行马上给了我一个即时记忆错误。有没有一种方法可以让我使用np.sum,然后用另一种方法来计算呢?你有两个问题: 请参阅Sven Marnach的评论,您的数据集对于您的硬件来说可能太大 参见ajcr的评论,您想做的事情与您尝试的方式不可行
mat
,形状为700000 x 6000),我想通过这些列求和,找到非零索引
我想这样总结一下:
x = np.sum(mat[:,y], axis=1)
indices = np.nonzero(x)
但是第一行马上给了我一个即时记忆错误。有没有一种方法可以让我使用np.sum,然后用另一种方法来计算呢?你有两个问题:
mat[:,一个索引]
返回一个维度1的数组,其唯一的轴是axis=0
In [39]: a = np.zeros((10,5))
In [40]: for i in range(5): a[3,i]=1+2*i if i != 3 else 0.0
In [41]: a
Out[41]:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 1., 3., 5., 0., 9.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
In [42]: np.sum(a,axis=0)
Out[42]: array([ 1., 3., 5., 0., 9.])
In [43]: np.nonzero(np.sum(a,axis=0))
Out[43]: (array([0, 1, 2, 4]),)
In [44]:
假设
y
是一个整数np.sum(mat[:,y],axis=1)
生成一个ValueError
,因为mat[:,y]
具有形状(7000000,)
。您是否正在执行mat[:,:y]
操作(切片到y
th列)?假设您的矩阵包含标准浮点数,则纯矩阵数据将占用几乎32 GB的内存。根据您所使用的硬件,仅在内存中对这种大小的数据集执行操作可能不是一个好主意。