不幸的是,numpy版本为1.8.2
,我得到以下行为:
我有一本以八个稀疏CSR矩阵为值的字典。
>>> tmp = [ (D[key][select,:].T.sum(0))[:,:,None] for key in D ];
到此为止,没有问题。该列表包含形状为(1,len(select),1)
的密集2d numpy矩阵。 len(select)
小于300。内存消耗仅为3%左右,并且几乎有7 GB的可用RAM。
>>> result = np.concatenate(tmp,axis=2);
眨眼间,我从终端上收到了分段错误(' Speicherzugriffsfehler '),htop
上没有任何可见的迹象表明该内存将满或发生任何事情。另外,我认为消耗量不应超过以前的两倍,几乎没有。但是,我可以根据需要多次重复,它总是给我一个SegFault。
我想排除这是我的实现问题。
更新:似乎在将numpy略微更新为1.10版之后,此问题不再发生。也许1.8.2中存在一些严重的错误,因为它已经完全过时了,所以没人在乎...
答案 0 :(得分:1)
看看您的代码,发生了一些奇怪的事情(即使在1.16中)
从样本稀疏矩阵开始:
Province | Below SLA | Near SLA | Over SLA
------------------------------------------------
Bali 30 Null Null
稀疏矩阵的行或列总和产生In [365]: M
Out[365]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 20 stored elements in Compressed Sparse Row format>
In [366]: M[0,:].T
Out[366]:
<10x1 sparse matrix of type '<class 'numpy.float64'>'
with 3 stored elements in Compressed Sparse Column format>
In [367]: M[0,:].T.sum(0)
。
np.matrix
我们不应该将Out[367]: matrix([[1.91771869]])
In [368]: M[0,:].T.sum(0)[:,:,None]
Out[368]: matrix([[[1.91771869]]])
扩展到3d。这会在串联中引起问题吗?不是现在,但是可能是早期版本中的
np.matrix
几天前,我看到一个问题,该问题在不应该产生3d In [369]: np.concatenate([M[0,:].T.sum(0)[:,:,None]])
Out[369]: matrix([[1.91771869]])
In [370]: _368.shape
Out[370]: (1, 1, 1)
In [371]: np.concatenate([_368,_368])
Out[371]: matrix([[1.91771869, 1.91771869]])
时产生。