Numpy spsolve和solve的意外差异
我需要解各种大小的线性方程组。有时大小可能为0或1,在这种情况下会发生一些错误。比如说,Numpy spsolve和solve的意外差异,numpy,scipy,sparse-matrix,Numpy,Scipy,Sparse Matrix,我需要解各种大小的线性方程组。有时大小可能为0或1,在这种情况下会发生一些错误。比如说, import numpy as np from numpy.linalg import solve from scipy.sparse.linalg import spsolve A1 = np.array([[1,2],[2,1]]) b1 = np.array([[1],[1]]) A2 = np.array([[1]]) b2 = np.array([[1]]) 调用spsolve或solve时会出
import numpy as np
from numpy.linalg import solve
from scipy.sparse.linalg import spsolve
A1 = np.array([[1,2],[2,1]])
b1 = np.array([[1],[1]])
A2 = np.array([[1]])
b2 = np.array([[1]])
调用spsolve或solve时会出现一些意外结果:
sage: solve(A1,b1)
array([[ 0.33333333],
[ 0.33333333]])
sage: solve(A2,b2)
array([[ 1.]])
sage: spsolve(A1,b1)
array([ 0.33333333, 0.33333333])
sage: spsolve(A2,b2)
ValueError: object of too small depth for desired array
请注意,“spsolve(A1,b1)”的调用实际上产生了一个行向量,是否有强制它成为列向量的方法?此外,调用“spsolve(A2,b2)”的错误也很奇怪,因为A1和b1的大小不是零。
spsolve
不返回2d数组,而是返回1d向量
使用numpy.至少\u 2d
膨胀向量,例如,在您的示例中
In [10]: np.atleast_2d(spsolve(A1,b1)).T
Out[10]:
array([[ 0.33333333],
[ 0.33333333]])
和.T
以获得列(2d)向量。这可能也解决了第二个问题,与结果向量的深度有关
(我不使用sage,因此无法重现您的错误。)有趣。我在python-2.6上尝试了您的方法,它可以正常工作,没有任何错误。但在Sage-5.3中,它总是弹出错误消息:“97 options=dict(ColPerm=permc_spec)98 return\u superlu.gssv(N,A.nnz,A.data,A.index,A.indptr,b,flag,-->99 options=options)[0]100 101 def splu(A,permc\u spec=None,diag\u pivot\u thresh=None,ValueError:对于所需数组,对象深度太小”