使用numpy求矩阵的逆不会得到预期的结果

2024-05-19 12:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个密码来解密希尔密码文本。在我们使用线性代数的地方,有人教我们如何手工操作。我的代码需要我找到一个平方矩阵的逆。你知道吗

假设我对2x2矩阵手动执行此操作。如果我的矩阵是:

|1  4 |
|11 11|

如果我找到行列式(mod 26,因为它毕竟是密码)和矩阵的伴随,我将得到:

|121  44|
|-121 11|

我可以在后面找到mod 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|

(I乘以11,因为19的模逆是11) 好吧,这就是我们被教导的。但是当我使用上面提到的numpy函数时:我得到:

[-0.33333333  0.12121212]
 [ 0.33333333 -0.03030303]]

当我期待一个[[121 -44],[-121,11]]的时候。你知道吗

我想我还没有理解numpy函数是如何工作的,这给了我一个错误的结果。请帮助我试着了解我能做些什么来获得我期望的结果


Tags: 函数代码文本numpymod元素密码地方
1条回答
网友
1楼 · 发布于 2024-05-19 12:35:58

也许你的数学不正确?你知道吗

我得到了{(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工作得很好,它的功能是反转矩阵,这是正确的。我猜你在纸笔数学上犯了些错误。你知道吗

相关问题 更多 >