对于一个主题,我正在使用numpy实现wikipedia中的Hill Cipher示例。到目前为止,我的代码如下:
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()存在浮点精度问题。但是这些结果与预期的是如此不同,以至于必须要继续进行下去吗?我是numpy的新手。请帮助我了解这里发生的情况以及如何缓解该问题,因此密钥矩阵将按照本文的说明进行反转。谢谢您的宝贵时间。