Проблема с numpy точечным произведением не работает - PullRequest
0 голосов
/ 10 марта 2020

В настоящее время я изучаю линейную алгебру и пытаюсь опробовать то, что изучаю в коде. Я использую numpy в python.

Проблема в том, что, как вы знаете, любая матрица, умноженная на ее обратную, даст нам единичную матрицу.

но здесь этого не происходит.

B= np.array([[3.0, 0.0, 2.0], [2.0, 0.0, -2.0], [0.0, 1.0, 1.0]])
Binv = np.linalg.inv(B)
Bbits= np.dot(B,Binv)

Я пробовал это вручную. Он получает обратное правильно, а точечное произведение - нет. Смотрите вывод битов

[[ 1.00000000e+00  0.00000000e+00 -5.55111512e-17]
 [ 0.00000000e+00  1.00000000e+00  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]

1 Ответ

0 голосов
/ 11 марта 2020

Ваш результат на самом деле правильный!

Запустив точно такой же код, который вы указали, но добавив np.around(),

B= np.array([[3.0, 0.0, 2.0], [2.0, 0.0, -2.0], [0.0, 1.0, 1.0]])
Binv = np.linalg.inv(B)
Bbits= np.around(np.dot(B,Binv),2)

, мы получим следующий вывод:

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

В ваших результатах -5.55111512e-17 - просто ошибка округления!

...