【问题标题】:Matrix Multiplication in Python LanguagePython 语言中的矩阵乘法
【发布时间】:2015-07-15 14:17:27
【问题描述】:

我正在尝试对给定的硬编码矩阵使用嵌套的 while 循环进行矩阵乘法...

这个问题的正确答案应该是[[6,12], [15,30], [24,48]]

但我的代码的输出是 [[6,12], [6,12], [6,12]]

我该怎么办?

a=[[1,2,3],[4,5,6],[7,8,9]]
b=[[1,2],[1,2],[1,2]]
c=[]

cola=len(a)
rowa=len(a[0])
colb=len(b)
rowb=len(b[0])
r,s,t,u,sum = 0,0,0,0,0

c=[([0]*rowb)]*cola

print c


while s<cola:
    while u<rowb:  
        while t<colb:
            d=a[s][t]*b[t][r]
            sum+=d
            t+=1

        c[s][r]=sum
        sum=0
        u+=1
        t=0
        r+=1

    r=0    
    s+=1

print c

【问题讨论】:

  • 有什么理由不能使用numpy
  • 我们尽可能避免导入模块,以便能够更多地练习基础知识。

标签: python matrix


【解决方案1】:

当你这样做时 -

c=[([0]*rowb)]*cola

您只是复制内部列表cola 次,这是浅复制,因此每个内部列表都是对同一对象的引用,因此当您更改其中一个内部列表中的元素时,它会影响所有内部列表。取而代之的是,尝试使用列表推导来创建 c 列表。

示例 -

c = [[0 for _ in range(rowb)] for _ in range(cola)]

此外,您的逻辑中的另一个小问题是,您使用 r 表示来自 b 的元素,但在您正在检查的 while 循环中 - u ,您应该检查 r 。示例 -

while s<cola:
    while r<rowb: 

【讨论】:

  • 为什么将第一个复制到所有而不是最后一个?
  • 逻辑中也有一个小问题,它只计算第一行,我也在答案中添加了问题描述和可能的修复。谢谢
  • 请查看最新的回答,逻辑上有个小错误,我在回答中已经指出了。
  • 我想建议,如果答案对您有帮助,请接受它(通过单击左侧的勾号使其变为绿色)。这将对社区有所帮助。
【解决方案2】:
#!/usr/bin/env python
#-*- coding: utf-8 -*-

matrixA = [[1,2,3],[4,5,6],[7,8,9]]
matrixB = [[1,2],[1,2],[1,2]]
result = []

for row in range(len(matrixA)):
    rowResult = []
    for column in range(len(matrixB[0])):
        s = 0
        l = len(matrixA[row])
        for i in range(l):
            s += matrixA[row][i]*matrixB[i][column]
        rowResult.append(s)
    result.append(rowResult)

print result

我试试这个,是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多