Обратная матрица с использованием numpy не дает ожидаемых результатов - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь написать код для дешифрования текста Hill Cipher. Нас учили, как это делать вручную, когда мы используем линейную алгебру. Мой код нуждается во мне, чтобы найти обратную квадратную матрицу.

Допустим, я делаю это вручную для матрицы 2x2. Если моя матрица:

|1  4 |
|11 11|

Если я найду определитель (мод 26, потому что он все-таки для шифра) и присоединенный к матрице, я в итоге получу:

|121  44|
|-121 11|

Позже я могу найти мод элементов 26, но я пытаюсь сказать, что получу целые числа.

Теперь, чтобы закодировать это, у меня было время, поэтому я решил использовать numpy, чтобы найти обратную матрицу, вместо того, чтобы писать отдельные коды для поиска обратной и присоединенной. Вот что я сделал:

a=[[1,11],[4,11]]
print(linalg.inv(a))

Когда я делаю это вручную, Я получаю 19 как определитель

Inverse=     1 |11  -4| = 11|11  -4| = |121  -44|
             19|-11  1|     |-11  1|   |-121  11|

(я умножил на 11, потому что модульная обратная 19 равна 11) Итак, это то, чему нас учили. Но когда я использую вышеупомянутую функцию numpy: я получаю:

[-0.33333333  0.12121212]
 [ 0.33333333 -0.03030303]]

пока я ожидал [[121 -44],[-121,11]].

Не думаю, что я понял, как работает функция numpy, что дает мне неверный результат. Пожалуйста, помогите мне попытаться понять, что я могу сделать, чтобы получить ожидаемые результаты

1 Ответ

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

Может быть, ваша математика неверна?

Я получил матричную инверсию {(1,11),(4,11)}, равную {(-1/3,1/3),(4/33,-1/33)}. (Вы можете попробовать это из онлайн калькулятора, я использовал wolframalpha.)

Это дает тот же вывод, который я получил (как и ваш):

runfile('C:/Users/HP/.spyder-py3/numpyinvtest_for_stackoverflow.py', wdir='C:/Users/HP/.spyder-py3')
[[-0.33333333  0.33333333]
 [ 0.12121212 -0.03030303]]

Мой код:

import numpy as np

b = np.array([[1,11],[4,11]])
c = np.linalg.inv(b)

print (c)

NumPy работает нормально, и его функциональность здесь в том, чтобы инвертировать матрицу, что сделано правильно. Я полагаю, вы допустили некоторые ошибки в математике с ручкой и бумагой.

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