45

ベクトル(3 x 1)にその転置(1 x 3)を掛けようとしています。(3 x 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
4

4 に答える 4

52

貼り付けたマトリックス

[[   1,    8,   50],
 [   8,   64,  400],
 [  50,  400, 2500]]

行列式がゼロです。これは、特異行列 (逆行列が存在しない行列) の定義です。

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

于 2012-04-26T01:22:05.590 に答える
39

定義上、1D ベクトルにその転置を掛けることで、特異行列が作成されます。

各行は、最初の行の線形結合です。

2 行目は 1 行目のわずか 8 倍であることに注意してください。

同様に、3 行目は 1 行目の 50 倍です。

マトリックスには独立した行が 1 つしかありません。

于 2012-04-26T01:21:40.330 に答える