我想为x
Ax = b
其中A是稀疏的,b是常规列矩阵。但是,当我插入通常的np.linalg.solve(A,b)
例程时,它会给我一个错误。但是,当我np.linalg.solve(A.todense(),b)
时,它工作正常。
如何使用此线性求解仍然保留sparseness
的{{1}}?原因是A
关于A
非常大,并且大约有50个这样的矩阵,所以尽可能长时间保持稀疏是我喜欢的方式。
我希望我的问题有道理。我该如何实现这个目标呢?
答案 0 :(得分:2)
使用scipy来处理稀疏矩阵。您可以使用scipy.sparse.linalg.spsolve
来执行此操作。有关详细信息,请阅读其文档spsolve
答案 1 :(得分:1)
np.linalg.solve
仅适用于类似数组的对象。例如,它适用于np.ndarray
或np.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是一个矩阵,而不是一个向量。