【问题标题】:efficient way to get the max of each row for large sparse matrix获取大型稀疏矩阵每行最大值的有效方法
【发布时间】:2013-04-06 05:59:39
【问题描述】:

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

【问题讨论】:

    标签: python scipy sparse-matrix


    【解决方案1】:

    如果您的矩阵(称为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
    

    【讨论】:

      【解决方案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-09
      • 2016-11-13
      • 2019-11-05
      • 2011-11-05
      • 1970-01-01
      • 2015-03-01
      • 2019-04-29
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多