我有一个大的稀疏矩阵,我想获得每一行的最大值。在 numpy 中,我可以调用 numpy.max(mat, axis=1),但我找不到 scipy 稀疏矩阵的类似函数。是否有任何有效的方法来获取大型稀疏矩阵的每一行的最大值?
问问题
2095 次
2 回答
4
如果您的矩阵(我们称之为a
)以 CSR 格式存储,则a.data
所有非零条目均按行排序,并且a.indptr
具有每行第一个元素的索引。您可以使用它来计算您所追求的内容,如下所示:
def sparse_max_row(csr_mat):
ret = np.maximum.reduceat(csr_mat.data, csr_mat.indptr[:-1])
ret[np.diff(csr_mat.indptr) == 0] = 0
return ret
于 2013-04-15T06:21:34.503 回答
2
我刚刚遇到了同样的问题。如果矩阵中的任何行完全为空,Jaime 的解决方案就会中断。这是一个解决方法:
def sparse_max_row(csr_mat):
ret = np.zeros(csr_mat.shape[0])
ret[np.diff(csr_mat.indptr) != 0] = np.maximum.reduceat(csr_mat.data,csr_mat.indptr[:-1][np.diff(csr_mat.indptr)>0])
return ret
于 2013-06-26T22:28:16.920 回答