如何将稀疏矩阵转换为三元组列表

How to convert a sparse matrix into a list of triples

我有一个稀疏矩阵,例如:

from scipy.sparse import random
from scipy import stats
from numpy.random import default_rng
rng = default_rng()
rvs = stats.poisson(2).rvs
S = random(10, 10, density=0.25, random_state=rng, data_rvs=rvs)
S.A

array([[4., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 3., 2., 0., 0.],
       [0., 0., 0., 0., 1., 0., 3., 0., 0., 5.],
       [0., 2., 0., 0., 0., 0., 2., 2., 0., 0.],
       [0., 3., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 4., 1., 0., 0., 1.],
       [0., 2., 0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 3., 0., 0., 1., 2., 0., 0., 2., 2.]])

如何将 S 转换为(row_id、col_id、值)三元组的列表。

在这种情况下是:

[(0, 0, 4), (1, 1, 1), (1, 6, 3), (1, 7, 2), (2, 4, 1), (2, 6, 3)....]

虽然文档有点无用,但“COO”格式的稀疏矩阵仅包含 colrowdata 列表,您可以通过以下方式 zip()

from numpy import array
from scipy.sparse import coo_matrix
coo = coo_matrix(array([[1,2,3],[0,0,0],[0,4,0]]))
coo_list = list(zip(coo.row, coo.col, coo.data))
print(coo_list)

生产

[(0, 0, 1), (0, 1, 2), (0, 2, 3), (2, 1, 4)]