题解 | #牛牛的矩阵乘法#
牛牛的矩阵乘法
https://www.nowcoder.com/practice/4356eb31276b4b7689a4cf0997647f88
import copy x = [[13, -1, 4], [5, 0, 6], [1, 9, -3]] # y = x.copy() y = copy.deepcopy(x) # print(y) # for i in range(len(y)): # for j in range(len(y[i])): # y[i][j] += 1 # 因为该题目答案错了,根据题目答案的意思y矩阵并没有在x的矩阵的对应位置的元素值加1,而是完全等于x矩阵。所以注释了上段代码。 # print(y) # z = [[]] # 这样操作的效果相当于对[0]*3的一维列表复制了3次,也就是说,当更改其中一个列表的值时,实际上对z列表中的这3个列表都修改了值。 # z = [[0] * 3] * 3 # 这个赋初值的方法有问题,一旦这样做,那么后面的列表都和前面的列表的元素值一样, # 因为是直接相乘赋值的,相当于后面两个直接复制了前面定义的那一个两次。 # z = [[0 for i in range(3)] for j in range(3)] # 这样才是正确的 z = list(list(0 for i in range(3)) for _ in range(3)) # 这样也是正确的 # 但下面这样是错误的,这样是相当于创建了1行3列的二维数组。 # z = list(list(0 for _ in range(3))) # 总之,有几个嵌套的list()函数就是几维数组,有几个嵌套的[]就是几维数组。 # z = [[0,0,0],[0,0,0],[0,0,0]] # print(z) # z = [[0] * 3 for _ in range(3)] for i in range(len(y)): # 行 for j in range(len(y[i])): # 列 # z.append() # for k in x[i]: # k * y[j][i] # z[i][j] += k * y[j][i] # z[i][j] = x[i][j] * y[i][j] length = 0 width = 0 while length < len(x) and width < len(x): z[i][j] += x[i][width] * y[length][j] # print(z[1][0]) length += 1 width += 1 print(z)