我想保留插入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吗?(。