python如何求稀疏矩阵的逆

2024-06-07 10:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过了。利纳格投资公司。它返回一个错误,即矩阵不是正方形。在

我试过了新利纳格发票,它返回一个错误,表明我传递了一个0维数组。在

有谁能帮我倒一下scipy CSR矩阵,它的类型是:

    <10000x31331 sparse matrix of type '<type 'numpy.float64'>'
    with 801667 stored elements in Compressed Sparse Row format>

Tags: ofnumpy类型type错误公司矩阵发票
2条回答

试着看看np.linalg.pinv公司公司名称:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.pinv.html

这是“矩阵的广义逆”,对矩形(非正方形)矩阵有效。注意,正如已经指出的,矩形矩阵没有唯一的逆,但是,如果我们施加额外的要求(通过最小二乘法最小化重建误差),我们可以得到唯一的答案。只是要小心解释。在

有空的话可以在这里多读一些:https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse

另外,由于您使用的是scipy库中的CSR矩阵,我假设速度很重要,所以请阅读以下内容:

The difference of pseudo-inverse between SciPy and Numpy

我不确定是否有类似于pinv的CSR矩阵的方法,但是如果没有,您可以使用“my_csr_matrix.toarray()”方法将CSR转换为numpy矩阵,但是要考虑开销等因素(这将取决于应用程序是否可行)。在

做一个小数组:

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]])

制作稀疏副本:

^{pr2}$

toarraypinv与之前相同:

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-因为它不知道如何正确地读取数据结构

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 ofAis expected to be non-sparse, it will likely be faster to convertAto dense and use scipy.linalg.inv.同样的警告可能适用于pinv或等效物。在

我没有立即看到稀疏linalg列表中的pinv,但它确实有一个lsqr。在

=================

pseudo inverse of sparse matrix in python(2011年)

支持伪逆很可能是稠密的观点。但它也提出了一种利用svds的稀疏解决方案。在

还有

How to calculate the generalized inverse of a Sparse Matrix in scipy

相关问题 更多 >

    热门问题