Numpy:连接时的分段错误



不幸的是,使用过时的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.16 中)

从示例稀疏矩阵开始:

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]]])

我们不应该能够将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]])

就在几天前,我看到一个问题,它产生了一个 3dnp.matrix,而它不应该有。

为什么索引此 Numpy 矩阵会导致错误?

最新更新