让一小阵:
In [435]: A=np.array([[1,0,2,0],[0,1,3,0],[3,0,0,4]])
In [436]: A
Out[436]:
array([[1, 0, 2, 0],
[0, 1, 3, 0],
[3, 0, 0, 4]])
In [437]: np.linalg.pinv(A)
Out[437]:
array([[ 0.61538462, -0.36923077, 0.04615385],
[-0.57692308, 0.44615385, 0.06923077],
[ 0.19230769, 0.18461538, -0.02307692],
[-0.46153846, 0.27692308, 0.21538462]])
做一个稀疏副本:
In [439]: M=sparse.csr_matrix(A)
的toarray
的pinv
是同样的事情之前:
In [441]: np.linalg.pinv(M.toarray())
Out[441]:
array([[ 0.61538462, -0.36923077, 0.04615385],
[-0.57692308, 0.44615385, 0.06923077],
[ 0.19230769, 0.18461538, -0.02307692],
[-0.46153846, 0.27692308, 0.21538462]])
无法使用直接在稀疏矩阵上的numpy inv - 因为它不知道如何正确LY读取数据结构
In [442]: np.linalg.pinv(M)
...
LinAlgError: 0-dimensional array given. Array must be at least two-dimensional
有稀疏linalg inv
,但它仅仅是spsolve(A,I)
。它也警告If the inverse of
A is expected to be non-sparse, it will likely be faster to convert
A to dense and use scipy.linalg.inv.
相同的警告可能适用于pinv
或等同物。
我不会在稀疏的内侧列表中看到pinv
,但它确实有lsqr
。
===================
pseudo inverse of sparse matrix in python(2011)
支持了伪逆可能是致密的。但它也暗示了利用svds
的稀疏解决方案。
而且
How to calculate the generalized inverse of a Sparse Matrix in scipy
你需要去学习一些线性代数。你的矩阵不是平方的,只有方阵实际上有倒数。 – user2357112