Python 为什么';t scipy.sparse.csc_矩阵是否保留我的np.array的索引顺序?

Python 为什么';t scipy.sparse.csc_矩阵是否保留我的np.array的索引顺序?,python,scipy,sparse-matrix,matrix-indexing,Python,Scipy,Sparse Matrix,Matrix Indexing,我正在编写代码,以便同时高效地从几个大型并行scipysparse.csc矩阵(意味着所有矩阵都具有相同的dim,并且所有nnz元素都位于相同的位置)中删除多个列。为此,我只为一个矩阵保留的列编制索引,然后为其他矩阵重用索引和indptr列表。但是,当我通过列表对csc矩阵进行索引时,它会对数据列表进行重新排序,因此我无法重用索引。有没有办法强制scipy保持数据列表的原始顺序?为什么只在按列表索引时才重新排序 导入scipy.sparse 将numpy作为np导入 mat=scipy.spar

我正在编写代码,以便同时高效地从几个大型并行scipy
sparse.csc
矩阵(意味着所有矩阵都具有相同的dim,并且所有nnz元素都位于相同的位置)中删除多个列。为此,我只为一个矩阵保留的列编制索引,然后为其他矩阵重用索引和indptr列表。但是,当我通过列表对csc矩阵进行索引时,它会对数据列表进行重新排序,因此我无法重用索引。有没有办法强制scipy保持数据列表的原始顺序?为什么只在按列表索引时才重新排序

导入scipy.sparse
将numpy作为np导入
mat=scipy.sparse.csc_矩阵(np.数组[1,0,0,2,5],
[1,0,1,0,0,0], 
[0,0,0,4,0,1],
[0,3,0,1,0,4]]))
打印mat[:,3]。数据
返回数组([4,1])

print mat[:,[3]]数据
返回数组([1,4])

分类:

In [57]: m2.sort_indices()                                                      
In [58]: m2.data                                                                
Out[58]: array([4, 1], dtype=int64)
In [59]: m2.indices                                                             
Out[59]: array([2, 3], dtype=int32)
csc使用列表索引使用矩阵乘法。它基于索引构造提取器矩阵,然后进行点乘。这是一个全新的稀疏矩阵;不仅仅是csc数据和索引属性的子集

csc矩阵有一种方法确保标记值有序(在列中)。应用这一点可能有助于确保以相同的方式对数组进行排序


csc
列表索引使用矩阵乘法。它基于索引构造一个提取器矩阵,然后执行
乘法。这是一个全新的稀疏矩阵;不仅仅是
csc
数据和索引属性的子集。
csc
矩阵有一种方法来确保
标记
值(在一列中)有序。应用该选项可能有助于确保数组以相同的方式排序。这只是IPython会话记录,不是答案。@user2357112,对不起,我忘记将我的注释复制粘贴到我的答案:(
In [48]: m1 = mat[:,3]                                                          
In [49]: m1                                                                     
Out[49]: 
<4x1 sparse matrix of type '<class 'numpy.int64'>'
    with 2 stored elements in Compressed Sparse Column format>
In [50]: m1.data                                                                
Out[50]: array([4, 1])
In [51]: m1.indices                                                             
Out[51]: array([2, 3], dtype=int32)
In [52]: m1.indptr                                                              
Out[52]: array([0, 2], dtype=int32)
In [53]: m2 = mat[:,[3]]                                                        
In [54]: m2.data                                                                
Out[54]: array([1, 4], dtype=int64)
In [55]: m2.indices                                                             
Out[55]: array([3, 2], dtype=int32)
In [56]: m2.indptr                                                              
Out[56]: array([0, 2], dtype=int32)
In [57]: m2.sort_indices()                                                      
In [58]: m2.data                                                                
Out[58]: array([4, 1], dtype=int64)
In [59]: m2.indices                                                             
Out[59]: array([2, 3], dtype=int32)