【问题标题】:How to use a sparse matrix in numpy.linalg.solve如何在 numpy.linalg.solve 中使用稀疏矩阵
【发布时间】:2017-03-02 17:01:15
【问题描述】:

我想为x求解以下线性系统

Ax = b

其中 A 是稀疏的,b 只是常规列矩阵。但是,当我插入通常的np.linalg.solve(A,b) 例程时,它给了我一个错误。但是,当我执行 np.linalg.solve(A.todense(),b) 时,它工作正常。

问题。

如何使用这个线性求解仍然保留sparsenessA?。原因是A150 x 150 相比相当大,大约有 50 个这样的矩阵,所以尽可能长时间地保持稀疏是我更喜欢的方式。

我希望我的问题是有道理的。我应该如何实现这一目标?

【问题讨论】:

标签: python numpy scipy sparse-matrix


【解决方案1】:

使用 scipy 来处理稀疏矩阵。您可以使用 scipy.sparse.linalg.spsolve 来实现。有关更多详细信息,请阅读其文档spsolve

【讨论】:

    【解决方案2】:

    np.linalg.solve 仅适用于类似数组的对象。例如,它适用于 np.ndarraynp.matrix(来自 numpy 文档的示例):

    import numpy as np
    
    a = np.array([[3,1], [1,2]])
    b = np.array([9,8])
    x = np.linalg.solve(a, b)
    

    import numpy as np
    
    a = np.matrix([[3,1], [1,2]])
    b = np.array([9,8])
    x = np.linalg.solve(a, b)
    

    或在A.todense() 上,其中A=scipy.sparse.csr_matrix(np.matrix([[3,1], [1,2]])) 会返回一个np.matrix 对象。

    要使用稀疏矩阵,您必须使用 scipy.sparse.linalg.spsolve(正如 rakesh 已经指出的那样)

    import numpy as np
    import scipy.sparse
    import scipy.sparse.linalg
    
    a = scipy.sparse.csr_matrix(np.matrix([[3,1], [1,2]]))
    b = np.array([9,8])
    x = scipy.sparse.linalg.spsolve(a, b)
    

    请注意,x 仍然是 np.ndarray 而不是稀疏矩阵。仅当求解 Ax=b 时才会返回稀疏矩阵,其中 b 是矩阵而不是向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多