给定`scipy.sparse.coo_matrix`类型矩阵,如何找出每行的最大值及其索引?
给定一个稀疏矩阵R
,它的类型是scipy.sparse.coo_matrix
,大小是1.000.000 x 70.000
,我发现
row_maximum = max(R.getrow(i).data)
可以让我得到第i行的最大值。
现在我需要的是与这个最大值row_maximum
对应的索引。
有没有什么好的方法可以做到这一点呢?
提前感谢任何建议!
2 个回答
-1
使用 numpy.argmax
(或者 scipy.argmax
,这两个是一样的)
index_of_maximum = scipy.argmax(R.getrow(i).data)
8
getrow(i)
这个函数会返回一个 1 行 n 列的 CSR 矩阵。这个矩阵有一个叫 indices
的属性,它告诉我们在 data
属性中对应值的行索引。因为我们知道这个矩阵的形状是 1 行 n 列,所以我们不需要去处理 indptr
这个属性。这样就可以正常使用了:
row = R.getrow(i)
max_index = row.indices[row.data.argmax()] if row.nnz else 0
我们需要单独处理 row.nnz
为 0 的情况,因为如果 row.data
是一个空数组,调用 row.data.argmax()
会出现错误。