如何将配对阵列列表转换为2x1阵列?

时间:2017-05-12 05:38:32

标签: python arrays encryption

我正在尝试用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}}类似的结果。对这个项目的任何帮助都很棒

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