Используя обратную матричную функцию "inv" в python numpy.linalg - PullRequest
0 голосов
/ 19 ноября 2018

Я использую функцию обратной матрицы inv() в Python. Я вычисляю обратную матрицу 3х3, но когда я умножаю результат на исходную матрицу, я не получаю матрицу единства, почему?

Пример:

AA = [[1,6,5],[2,3,1],[1,1,7]]

>>> inv(AA)
array([[-0.31746032,  0.58730159,  0.14285714],
[ 0.20634921, -0.03174603, -0.14285714],
[ 0.01587302, -0.07936508,  0.14285714]])

>>> inv(AA) * AA
array([[-0.31746032,  3.52380952,  0.71428571],
[ 0.41269841, -0.0952381 , -0.14285714],
[ 0.01587302, -0.07936508,  1.        ]])

>>> inv(AA) * AA
array([[-0.31746032,  3.52380952,  0.71428571],
[ 0.41269841, -0.0952381 , -0.14285714],
[ 0.01587302, -0.07936508,  1.        ]])

... которая не является матрицей единства I. Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

В Python 3.5 введен новый оператор для умножения матриц , поэтому это может быть:

from numpy.linalg import inv

AA = [[1,6,5],[2,3,1],[1,1,7]]

inv(AA) @ AA

, что дает мне:

array([[ 1.00000000e+00,  2.77555756e-17, -1.11022302e-16],
       [ 0.00000000e+00,  1.00000000e+00,  1.11022302e-16],
       [ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])

, что примерно настолько близко к единице, насколько это можно ожидать.

может иметь значение, см. различия между @ и dot и другие связанные с этим вопросы / ответы.

0 голосов
/ 19 ноября 2018

Вы делаете поэлементное умножение, а не матричное умножение.Измените код на np.matmul(inv(AA), AA) или np.dot(inv(AA), AA), и вы получите правильный результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...