Python语言中的矩阵乘法

Python语言中的矩阵乘法,python,matrix,Python,Matrix,我正在尝试对给定的硬编码矩阵使用嵌套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)

我正在尝试对给定的硬编码矩阵使用嵌套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
a=[[1,2,3]、[4,5,6]、[7,8,9]]
b=[[1,2],[1,2],[1,2]]
c=[]
可乐=蓝(a)
rowa=len(a[0])
colb=len(b)
rowb=len(b[0])
r、 s,t,u,和=0,0,0,0
c=[([0]*rowb)]*可乐
打印c
而s当你这样做时-

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: 
whiles

我尝试了这个,它是正确的。

为什么它将第一个复制到所有,而不是最后一个?逻辑中也有一个小问题,它只计算第一行,我在答案中添加了问题描述和可能的修复。谢谢,请检查最新的答案,逻辑上有一个小错误,我在答案中指出了。我想建议,如果答案对你有帮助,请接受它(通过点击左侧的勾号,使其变为绿色)。这将对社区有所帮助。您为什么不能使用
numpy
?我们尽可能避免导入模块,以便能够更多地练习基础知识。
#!/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