Python 求大型稀疏矩阵每行最大值的有效方法
我有一个大的稀疏矩阵,我想得到每行的最大值。在numpy中,我可以调用numpy.max(mat,axis=1),但对于scipy稀疏矩阵,我找不到类似的函数。有什么有效的方法可以获得大型稀疏矩阵每行的最大值吗?如果矩阵(我们称之为Python 求大型稀疏矩阵每行最大值的有效方法,python,scipy,sparse-matrix,Python,Scipy,Sparse Matrix,我有一个大的稀疏矩阵,我想得到每行的最大值。在numpy中,我可以调用numpy.max(mat,axis=1),但对于scipy稀疏矩阵,我找不到类似的函数。有什么有效的方法可以获得大型稀疏矩阵每行的最大值吗?如果矩阵(我们称之为a)以CSR格式存储,那么a.data具有按行排序的所有非零项,a.indptr具有每行第一个元素的索引。您可以使用此项计算您的目标,如下所示: def sparse_max_row(csr_mat): ret = np.maximum.reduceat(cs
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
我只是遇到了同样的问题。如果矩阵中的任何一行完全为空,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
当所有数据项均不大于0时,此操作失败: