矩阵求逆结果不正确

2024-04-27 13:27:21 发布

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

对于一个主题,我正在使用numpy实现来自wikipedia的Hill密码示例。我的代码如下:

import numpy as np

msg = np.array([0, 2, 19]) # CAT
key = np.matrix([
    [6, 24, 1],
    [13, 16, 10],
    [20, 17, 15]
])

ciphertext = np.mod(np.dot(key, msg), 26) # [5, 8, 13] # POH

# And here things go wrong
invKey = key.I
invKey2 = np.linalg.inv(key) # same as key.I

在第10行(“密文”)之前,一切都正常。np.mod公司(np.dot公司(key,msg),26)返回文章中指定的[15,14,7]。但是当我尝试做一个矩阵逆运算时,得到的结果和我预期的完全不同。本文建议键矩阵逆应返回以下内容:

[[8, 21, 21],
 [5, 8, 12],
 [10, 21, 8]]

但这是返回的:

[[ 0.15873016 -0.77777778  0.50793651]
 [ 0.01133787  0.15873016 -0.10657596]
 [-0.2244898   0.85714286 -0.48979592]]

现在,我可以从这个网站上的各种问题了解到numpy.linalg.inv公司()存在浮点精度问题。但这些结果与预期相差甚远,一定会有更多的事情发生,对吗?我是新来的。请帮助我理解这里发生了什么,以及我可以如何缓解这个问题,所以密钥矩阵是颠倒的,正如文章所指定的。谢谢你抽出时间。你知道吗


Tags: keynumpymod主题asnp文章公司
1条回答
网友
1楼 · 发布于 2024-04-27 13:27:21

回答我自己的问题,希尔密码需要的是一个矩阵模逆,而不是那个矩阵逆numpy.linalg.inv公司()提供。约翰斯答案中的代码是我需要的。你知道吗

相关问题 更多 >