Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求大型稀疏矩阵每行最大值的有效方法_Python_Scipy_Sparse Matrix - Fatal编程技术网

Python 求大型稀疏矩阵每行最大值的有效方法

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

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

如果矩阵(我们称之为
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时,此操作失败: