将scipy稀疏矩阵转换为基于索引的numpy数组
我有一个scipy稀疏矩阵,其中N个值为非零值,我希望返回一个带有形状(N,3)的numpy数组,其中第一列包含非零值的索引,最后一列包含相应的非零值 例如: 我想要将scipy稀疏矩阵转换为基于索引的numpy数组,numpy,scipy,sparse-matrix,Numpy,Scipy,Sparse Matrix,我有一个scipy稀疏矩阵,其中N个值为非零值,我希望返回一个带有形状(N,3)的numpy数组,其中第一列包含非零值的索引,最后一列包含相应的非零值 例如: 我想要 mymatrix.toarray() matrix([[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.
mymatrix.toarray()
matrix([[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0.83885831, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 1.13395003, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0.57979727, 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0.75500017, 0. , 0.81459546, 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.87997548, 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])
成为
np.array([[3, 2, 0.83885831], [4,5,1.13395003], [6,5,0.57979727], [7,4,0.75500017], [7,6,0.81459546], [8,9,0.87997548]])
array([[3. , 2. , 0.83885831],
[4. , 5. , 1.13395003],
[6. , 5. , 0.57979727],
[7. , 4. , 0.75500017],
[7. , 6. , 0.81459546],
[8. , 9. , 0.87997548]])
我如何有效地做到这一点
转换后,我将迭代行-因此,如果有一个有效的选项可以在不进行转换的情况下迭代行,我也希望:
for index_i, index_j, value in mymatrix.iterator():
do_something(index_i, index_j, value)
对于迭代,dok(dictionary of keys)格式看起来像是自然匹配;你可以做:
for (i,j), v in your_sparse_matrix.todok().items():
etc.
Nx3坐标值记录列表可通过coo格式轻松获取:
coo = your_sparse_matrix.tocoo()
np.column_stack((coo.row,coo.col,coo.data))
显然,这也可以用于迭代;您必须测试在您的用例中哪个更快