如何保持SciPy稀疏矩阵CSR_矩阵的插入顺序



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

>>> from scipy.sparse import csr_matrix
>>> x = csr_matrix(([1,2,3],[[3,2,1],[5,2,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方法插入可以保留行内的顺序(仍然按行排序,但不再按列索引排序(。而在索引是2D索引矩阵的情况下通过data, indices插入,则通过行索引和列索引二者进行排序。

CSR格式以逐行格式存储数据(通过在内存连续数据数组中标记每行开始和结束的位置(。你想要的信息并不存在于这种格式中——压缩的一部分是删除它

如果您需要这些排序信息,您可以将其保留为COO格式,但需要注意的是,有些操作会导致COO矩阵在没有警告的情况下进行排序。最好是显式而不是隐式地存储这些信息(scipy稀疏矩阵允许您在数据矩阵中使用structs吗?(。

最新更新