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)