【问题标题】:minimum of a sparse matrix?稀疏矩阵的最小值?
【发布时间】:2020-06-16 22:28:08
【问题描述】:

scipy.sparse 中似乎没有一种方法可以给出稀疏矩阵的最小值。特别是,我寻求列的最小值。

文档中没有出现任何方法,numpy minimum 不适用。如果X 是稀疏矩阵,X.min() 也会抛出错误:*** AttributeError: 'module' object has no attribute 'min'

这肯定是人们使用的东西。这是怎么做到的?

【问题讨论】:

  • 大概你的意思是“最小非零元素”。毕竟,稀疏矩阵隐含地包含大部分零。
  • 不——我的意思是“最低限度”。稀疏矩阵可以有负条目。拉尔斯曼的回答给出了这个。
  • 稀疏矩阵中的负数也是非零值。

标签: numpy scipy sparse-matrix


【解决方案1】:

对于 CSR/CSC 矩阵,使用

def min_sparse(X):
    if len(X.data) == 0:
        return 0
    m = X.data.min()
    return m if X.getnnz() == X.size else min(m, 0)

要按行或列执行此操作,您可以通过X.getrow(i) for i in X.shape[0]X.shape[1]map

但你说得对,这应该是一种方法。

【讨论】:

  • 谢谢——你太棒了!我将提交到 scipy-list。
  • 另外——了解稀疏矩阵的属性 .data 也很好。 (我相信)这在教程中没有提到。
  • 另外——你能解释一下为什么如果X.getnnz()==X.size返回m吗?我只是查看了实际的代码,这应该始终是正确的。我看到m 是你想要返回的——但我不明白你的返回逻辑。
  • 另外——代码中存在一个小错误。如果 X 是一个空矩阵,X.data 是一个空数组,并且 X.data.min() 会抛出一个ValueError。需要为此添加支票,否则谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2018-01-19
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多