Python Numpy:连接时出现分段错误

Python Numpy:连接时出现分段错误,python,numpy,matrix,segmentation-fault,concatenation,Python,Numpy,Matrix,Segmentation Fault,Concatenation,对于一个不幸过时的numpy版本1.8.2,我得到了以下行为: 我有一本字典,里面有八个稀疏的CSR矩阵作为值 >>> tmp = [ (D[key][select,:].T.sum(0))[:,:,None] for key in D ]; 在这之前,没有问题。该列表包含形状为1、lenselect、1的密集二维numpy矩阵。透镜选择小于300。内存消耗仅为3%左右,可用内存几乎为7GB >>> result = np.concatenate(tmp,a

对于一个不幸过时的numpy版本1.8.2,我得到了以下行为:

我有一本字典,里面有八个稀疏的CSR矩阵作为值

>>> tmp = [ (D[key][select,:].T.sum(0))[:,:,None] for key in D ];
在这之前,没有问题。该列表包含形状为1、lenselect、1的密集二维numpy矩阵。透镜选择小于300。内存消耗仅为3%左右,可用内存几乎为7GB

>>> result = np.concatenate(tmp,axis=2);
转眼间,我从终端上得到了分段故障“Speicherzugriffsfehler”,在htop上看不到内存将满或其他任何情况。此外,我认为消费量不应超过以前的两倍左右,这实际上是零。尽管如此,我想重复多久就重复多久,这总是给我一个错误

我想排除这是我执行的问题


更新:似乎在将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矩阵扩展到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]])
就在几天前,我看到一个问题,它产生了一个3d np.matrix,而它本不应该出现


您是否尝试在tmp的子集上连接?我还要检查所有元素的形状。若tmp包含密集数组,那个么D[key]最初是csr矩阵的事实就不重要了。如果内存是个问题,我希望是内存错误,而不是分割错误,但版本的年龄可能会有所不同。不幸的是,这些也不会产生结果。但现在,它曾经使用完全相同的代码工作过一次。下次再来一次。。。它甚至可能是我的硬件吗?我怀疑它与要连接的元素有关,这些元素是矩阵,因此被假定为2d…我现在将其更改为np.CONTANDATE[np.arrayM[0,:].T.sum0[,:,:,None]],但我可以想象这种错误也会相对容易地发生在其他人身上。。。
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]])