获得大型稀疏矩阵的每行最大值的有效方法

时间:2013-04-13 20:58:38

标签: python scipy sparse-matrix

我有一个大的稀疏矩阵,我想获得每一行的最大值。在numpy中,我可以调用numpy.max(mat,axis = 1),但是我找不到scipy稀疏矩阵的类似函数。有没有有效的方法来获得大型稀疏矩阵的每一行的最大值?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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