我正在尝试用Python编写Hill Cipher程序,允许用户输入自己的2x2矩阵和要编码或解码的消息。 消息" Hello World"已被加密到以下列表中:
for i in Num_Msg:
Vector=[np.ndarray(Num_Msg[i],shape=(2,1))]
Dot_Product=np.dot(Vector,Key_Matrix)
现在我想把每个数组转换成2x1向量,以便通过2x2矩阵键转换为np.dot。编码
np.reshape (Num_Msg,(2,1))
结果
TypeError:只有一个元素的整数数组才能转换为 索引。
我同样尝试了{{1}}类似的结果。对这个项目的任何帮助都很棒
答案 0 :(得分:1)
您看到的问题是i
已经是您的向量。所以你要找的循环是
for Vector in Num_Msg: # Notice Vector is the variable we're iterating over
Dot_Product=np.dot(Vector, Key_Matrix)
清理完毕后,你最终会
Num_Msg = np.array([[-24, 5], [12, 12], [15, -64], [-9, 15], [18, 12], [4, -64]])
Key_Matrix = numpy.random.rand(2, 2)
Dot_Product = numpy.array([np.dot(V, Key_Matrix) for V in Num_Msg])
但是,不需要for循环,但你可以让numpy.einsum
为你做循环:
Dot_Product2 = numpy.einsum('fi,ij->fj', Num_Msg, Key_Matrix)
并确保两者实际产生相同的结果:
numpy.allclose(Dot_Product, Dot_Product2) # True