给定`scipy.sparse.coo_matrix`类型矩阵,如何找出每行的最大值及其索引?

4 投票
2 回答
2584 浏览
提问于 2025-04-17 12:58

给定一个稀疏矩阵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() 会出现错误。

撰写回答