脾气暴躁:连接时出现分段错误

时间:2019-04-20 10:32:26

标签: python numpy matrix segmentation-fault concatenation

不幸的是,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中存在一些严重的错误,因为它已经完全过时了,所以没人在乎...

1 个答案:

答案 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]]) 时产生。

Why does indexing this Numpy matrix cause an error?