1. ホーム
  2. python

[解決済み] numpyを使った行列の逆行列

2023-06-27 15:53:28

質問

numpyを使って逆行列を計算したい。 しかし、私はエラーが発生します。

'numpy.ndarry' object has no attribute I

numpyで行列の逆行列を計算する場合、例えば行列Mの場合、簡単に言うと print M.I

以下はそのコードです。

x = numpy.empty((3,3), dtype=int)
for comb in combinations_with_replacement(range(10), 9):
   x.flat[:] = comb
   print x.I

このエラーが発生するのは、x が平坦になったためだと思われます。したがって、' I というコマンドは互換性がありません。回避策はあるのでしょうか?

私の目標は、すべての可能な数値行列の組み合わせのINVERSE MATRIXを表示することです。

どのように解決するのですか?

この I 属性は matrix オブジェクトにのみ存在し ndarray s. この場合 numpy.linalg.inv を使って配列を反転させることができます。

inverse = numpy.linalg.inv(x)

行列の生成方法を変更した場合、すべての行列が反転するわけではないことに注意してください。行列の生成方法を変更するか、反転しない行列をスキップする必要があります。

try:
    inverse = numpy.linalg.inv(x)
except numpy.linalg.LinAlgError:
    # Not invertible. Skip this one.
    pass
else:
    # continue with what you were doing

また、[0, 10]から要素を引いた3x3行列を全て調べたい場合は、以下のようにします。

for comb in itertools.product(range(10), repeat=9):

よりも combinations_with_replacement のような行列を読み飛ばすことになります。

numpy.array([[0, 1, 0],
             [0, 0, 0],
             [0, 0, 0]])