如何在 numpy.linalg.solve 中使用稀疏矩阵
How to use a sparse matrix in numpy.linalg.solve
我想为 x
求解以下线性系统
Ax = b
其中 A 是稀疏矩阵,b 只是常规列矩阵。但是,当我插入通常的 np.linalg.solve(A,b)
例程时,它会给我一个错误。但是,当我执行 np.linalg.solve(A.todense(),b)
时,它工作正常。
问题。
如何使用此线性求解仍然保留 A
的 sparseness
?。原因是 A
关于 150 x 150
相当大,大约有 50 个这样的矩阵,所以尽可能长时间地保持稀疏是我更喜欢的方式。
我希望我的问题有道理。我应该如何实现这一目标?
使用 scipy 来处理稀疏 matrices.You 可以使用 scipy.sparse.linalg.spsolve
来做到这一点。有关详细信息,请阅读其文档 spsolve
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]]))
作为此 returns 一个 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 是矩阵而不是向量。
我想为 x
Ax = b
其中 A 是稀疏矩阵,b 只是常规列矩阵。但是,当我插入通常的 np.linalg.solve(A,b)
例程时,它会给我一个错误。但是,当我执行 np.linalg.solve(A.todense(),b)
时,它工作正常。
问题。
如何使用此线性求解仍然保留 A
的 sparseness
?。原因是 A
关于 150 x 150
相当大,大约有 50 个这样的矩阵,所以尽可能长时间地保持稀疏是我更喜欢的方式。
我希望我的问题有道理。我应该如何实现这一目标?
使用 scipy 来处理稀疏 matrices.You 可以使用 scipy.sparse.linalg.spsolve
来做到这一点。有关详细信息,请阅读其文档 spsolve
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]]))
作为此 returns 一个 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 是矩阵而不是向量。