【问题标题】:Type hinting for scipy sparse matricesscipy 稀疏矩阵的类型提示
【发布时间】:2022-11-23 16:56:53
【问题描述】:

你如何输入提示scipy稀疏矩阵,例如CSR, CSC, LIL等?以下是我一直在做的,但感觉不对:

def foo(mat: scipy.sparse.csr.csr_matrix):
    # Do whatever

如果我们的函数可以接受多种类型的 scipy 稀疏矩阵(即它们中的任何一种),我们该怎么办?

【问题讨论】:

  • numpy 中的类型提示是一项相对较新的功能,可能尚未扩展到 scipy。从技术上讲,每个稀疏矩阵都是 sparse 类的一个实例。有一个csr_matrix类,一个lil_matrix类等等。谁/什么应该注意这个提示?程序员,或者像 mypy 这样的编码工具?
  • 许多 sparse 函数接受任何格式,将输入转换为某种首选格式以进行处理。例如,大多数计算都是使用 csr 完成的。 sparse 代码都没有使用类型提示(我见过)。
  • @hpaulj 它主要是为我/程序员准备的,所以如果没有类型提示,那还不算世界末日。我还计划让我的稀疏函数接受任何格式,这是我在第二个问题中提到的。谢谢!

标签: python scipy


【解决方案1】:

所有csr, csc, lil都是scipy.sparse.base.spmatrix的类型:

from scipy import sparse
c1 = sparse.lil.lil_matrix
c2 = sparse.csr.csr_matrix
c3 = sparse.csc.csc_matrix

print(c1.__bases__[0])
print(c2.__base__.__base__.__base__)
print(c3.__base__.__base__.__base__)

输出:

<class 'scipy.sparse.base.spmatrix'>
<class 'scipy.sparse.base.spmatrix'>
<class 'scipy.sparse.base.spmatrix'>

所以你可以选择:

def foo(mat: scipy.sparse.base.spmatrix):
    # Do whatever

【讨论】:

    【解决方案2】:

    spicy.sparse.base 现已弃用。您应该改用 spicy.sparse.spmatrix,它为所有稀疏矩阵提供了一个基类。

    def foo(mat: spicy.sparse.spmatrix):
        # Whatever you want
        pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2017-02-17
      • 2017-03-26
      • 2017-03-31
      • 2023-04-10
      • 2017-07-21
      • 2011-11-28
      相关资源
      最近更新 更多