Python 带列表的3x1矩阵乘法

Python 带列表的3x1矩阵乘法,python,list,matrix-multiplication,Python,List,Matrix Multiplication,这是一个希尔密码的尝试,到目前为止,直到第二个和第三个三角形相乘为止。我真的不明白我的错误在哪里。 基本上我要做的是列表乘法 使用这段代码,我创建了一个列表 key=[k[x:x+3] for x in xrange(0, len(k), 3)] message=[m[x:x+1] for x in xrange(0, len(m), 1)] key=[[16, 4, 11], [8, 6, 18], [15, 19, 15]] message=[[0], [12], [8], [6],

这是一个希尔密码的尝试,到目前为止,直到第二个和第三个三角形相乘为止。我真的不明白我的错误在哪里。 基本上我要做的是列表乘法

使用这段代码,我创建了一个列表

key=[k[x:x+3] for x in xrange(0, len(k), 3)]
message=[m[x:x+1] for x in xrange(0, len(m), 1)]    
key=[[16, 4, 11], [8, 6, 18], [15, 19, 15]]
message=[[0], [12], [8], [6], [15], [2], [15], [13], [3], [21], [2], [20], [15], [18], [8]]
我的目标是将
键列表中的每个子列表或列乘以
消息列表中的前三个列表

更新: 我已经按照建议做了一个嵌套循环,并且我已经将消息列表分成了块,但仍然无法使其工作

嵌套循环

result = [[0,],
         [0,],
         [0],]
#Divide the matrizm into chunks
n = 3
chunks = (matrizm[x:x+n] for x in range(0,len(matrizm), n))

#Matrix multiplication 
for triagram in chunks:
  # iterate through rows of X
  for i in range(len(matrizk)):
    # iterate through columns of Y
    for j in range(len(triagram[1])):
        # iterate through rows of Y
        for k in range(len(matrizk)):
           result[i][j] += matrizk[i][k] * triagram[k][j]
用我目前的代码,我只需要将前3个三元数相乘,顺便说一下,这给了我一个不正确的结果

我的问题是,有了这两个列表,我怎么能将前3个三元数相乘,然后再相乘3个,依此类推,直到matrizk列表的末尾

matrizk = [[16, 4, 11], [8, 6, 18], [15, 19, 15]]
matrizk = [[0], [12], [8], [6], [15], [2], [15], [13], [3], [21], [2], [20], [15], [18], [3]]

答案假设是Python 2.7x

数据:

一件似乎使事情复杂化的事情是,
message
是一个列表列表,为了让事情变得更简单,需要在某个时候将其展平

我将使用一个生成器来获取消息块,因为我将使用一个生成器来扁平化消息。还有其他方法可以将以下答案中的列表展平:

是另一个有用的函数,它类似于换位:

>>> zip([1,2],[3,4])
[(1, 3), (2, 4)]
>>> 
现在我们将用键和消息的每个3项块进行矩阵乘法

for group in grouper(message, n):
    # matrix multiplication
    for row in key:
        sum_prod = 0
        for a, b in zip(group, row):
            sum_prod += a*b
        #print(group, row, sum_prod, sum_prod % 26)
        result.append(sum_prod)
        #result.append(sum_prod % 26)

问题是什么?哎呀,对不起,我没有把自己说清楚,我怎样才能得到
result=[[136]、[216]、[348]、[178]、[174]、[405]、[325]、[252]、[517]、[564]、[540]、[653]、[598]、[696]、[957]
基本上不只是
result=[136]、[216]、[348]
,你在网上发现了一些你不知道它是如何工作的代码,它几乎做了你想做的事情,你想让我们帮你弄明白。没办法,伙计们,如果有什么的话,我只想得到一些指导来理解这段代码,因为列表理解对我来说有点困难,没有双关语意图尝试将其扩展到嵌套的for循环中;用尝试更新您的问题,然后询问关于您的尝试的任何具体问题。
>>> zip([1,2],[3,4])
[(1, 3), (2, 4)]
>>> 
for group in grouper(message, n):
    # matrix multiplication
    for row in key:
        sum_prod = 0
        for a, b in zip(group, row):
            sum_prod += a*b
        #print(group, row, sum_prod, sum_prod % 26)
        result.append(sum_prod)
        #result.append(sum_prod % 26)