如何保留 SciPy 稀疏矩阵 CSR_Matrix 中的插入顺序?
How to preserve order of insertion in SciPy Sparse Matrix CSR_Matrix?
我想保留插入 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
方法插入可以保留行内的顺序(仍然按行排序,但不再按列索引排序)。而按 data, indices
插入,其中 indices 是一个二维索引矩阵,然后按行和列索引排序。
CSR 格式以 row-wise 格式存储数据(通过标记 memory-contiguous 数据数组中每行开始和结束的位置)。您需要的信息在该格式中不存在 - 部分压缩是将其删除。
如果您需要该排序信息,您可以将其保留为 COO 格式,但需要注意的是,有些操作会导致 COO 矩阵在没有警告的情况下被排序。最好显式而不是隐式地存储该信息(scipy 稀疏矩阵是否允许您在数据矩阵中使用结构?)。
我想保留插入 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
方法插入可以保留行内的顺序(仍然按行排序,但不再按列索引排序)。而按 data, indices
插入,其中 indices 是一个二维索引矩阵,然后按行和列索引排序。
CSR 格式以 row-wise 格式存储数据(通过标记 memory-contiguous 数据数组中每行开始和结束的位置)。您需要的信息在该格式中不存在 - 部分压缩是将其删除。
如果您需要该排序信息,您可以将其保留为 COO 格式,但需要注意的是,有些操作会导致 COO 矩阵在没有警告的情况下被排序。最好显式而不是隐式地存储该信息(scipy 稀疏矩阵是否允许您在数据矩阵中使用结构?)。