Numpy的奇异矩阵问题

Nee*_*rav 21 python numpy matrix

我试图通过它的转置(1乘3)乘以向量(3乘1).我得到一个(3乘3)阵列,但我不能得到它的逆.知道为什么吗?

import numpy as np

c=array([1, 8, 50])
np.transpose(c[np.newaxis]) * c
array([[   1,    8,   50],
   [   8,   64,  400],
   [  50,  400, 2500]])
np.linalg.inv(np.transpose(c[np.newaxis]) * c)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 445, in inv
    return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 328, in solve
    raise LinAlgError, 'Singular matrix'
LinAlgError: Singular matrix
Run Code Online (Sandbox Code Playgroud)

kav*_*man 35

你粘贴的矩阵

[[   1,    8,   50],
 [   8,   64,  400],
 [  50,  400, 2500]]
Run Code Online (Sandbox Code Playgroud)

具有零的决定因素.这是奇异矩阵的定义(不存在逆矩阵)

http://en.wikipedia.org/wiki/Invertible_matrix


Joe*_*ton 31

根据定义,通过将1D向量乘以其转置,您已经创建了一个奇异矩阵.

每行是第一行的线性组合.

请注意,第二行只是第一行的8倍.

同样,第三行是第一行的50倍.

矩阵中只有一个独立的行.


Dil*_*hat 20

正如之前的答案中已经提到的,您的矩阵不能反转,因为它的行列式是 0。但是如果您仍然想得到逆矩阵,您可以使用np.linalg.pinv,它利用 SVD 来近似初始矩阵。

  • 您能详细说明一下吗? (2认同)
  • SVD 是奇异值分解 (https://en.wikipedia.org/wiki/Singular_value_decomposition)。pinv 是伪逆(https://en.wikipedia.org/wiki/Singular_value_decomposition#Pseudoinverse,https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse)。 (2认同)