從2013回答借款:
In [409]: a=np.random.rand(3,3)
In [410]: A=sparse.csr_matrix(a)
In [411]: np.linalg.inv(a)
Out[411]:
array([[ 26.11275413, -4.17749006, -9.82626551],
[-37.22611759, 9.38404027, 13.80073216],
[ 7.59314843, -2.04314605, -1.58410661]])
的np
INV不是sparse-aware
:
In [412]: np.linalg.inv(A)
....
LinAlgError: 0-dimensional array given. Array must be at least two-dimensional
隨着from scipy.sparse import linalg
:
In [414]: linalg.inv(A).A
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:243: SparseEfficiencyWarning: splu requires CSC matrix format
warn('splu requires CSC matrix format', SparseEfficiencyWarning)
/usr/lib/python3/dist-packages/scipy/sparse/linalg/dsolve/linsolve.py:161: SparseEfficiencyWarning: spsolve is more efficient when sparse b is in the CSC matrix format
'is in the CSC matrix format', SparseEfficiencyWarning)
Out[414]:
array([[ 26.11275413, -4.17749006, -9.82626551],
[-37.22611759, 9.38404027, 13.80073216],
[ 7.59314843, -2.04314605, -1.58410661]])
所以使用csc
格式,而不是csr
:
In [415]: A1=sparse.csc_matrix(a)
In [416]: linalg.inv(A1).A
Out[416]:
array([[ 26.11275413, -4.17749006, -9.82626551],
[-37.22611759, 9.38404027, 13.80073216],
[ 7.59314843, -2.04314605, -1.58410661]])
同樣的事情,但沒有稀疏警告。沒有深入細節,inv
必須使用迭代列而不是行的方法。它確實spsolve(A, I)
(I
是一個稀疏eye
矩陣)。
爲什麼2013年的答案會過時?你有沒有發現任何'稀疏''inv'函數或討論? – hpaulj
我認爲這可能是過時的,因爲在scipy庫中的更新,從那以後我創建了一個我找不到的成員函數。沒有討論被發現的稀疏逆。 –
評論指出'sparse.linalg.inv'正在起作用 - 這是我的版本。 – hpaulj