如何在SciPy稀疏矩阵CSR_Matrix中保留插入顺序?

问题描述

我想保留插入SciPy csr_matrix的顺序,但是它似乎总是按行排序,然后按索引排序:

>>> from scipy.sparse import csr_matrix
>>> x = csr_matrix(([1,2,3],[[3,1],[5,1]]))
>>> print(x)
  (1,1)    3
  (2,2)    2
  (3,5)    1

是否仍然保留原始排序?我想要什么:

  (3,5)    1
  (2,2)    2
  (1,1)    3

ETA:发现使用data,indices,indptr方法进行插入会保留行内的顺序(仍然按行排序,但不再按列索引排序)。而以data,indices插入的索引是2D索引矩阵,然后按行索引和列索引进行排序。

解决方法

CSR格式以行格式存储数据(通过在内存连续数据数组中标出每一行的开始和结束位置)。您想要的信息不存在该格式-压缩的一部分是删除它。

如果您需要该订购信息,则可以将其保留为COO格式,并需要注意的是,有些操作会导致对COO矩阵进行排序而不会发出警告。最好是显式存储该信息,而不是隐式存储该信息(scipy稀疏矩阵允许您在数据矩阵中使用结构吗?)。