解题思路:矩阵乘法->以两个二阶矩阵举例,即第一个矩阵的第一行数据分别乘以对应的第二个矩阵的第一列数据,
以题目中的例子来说,即结果矩阵的(0,0)点的数值等于第一个矩阵(0,0)*第二个矩阵(0,0)+第一个矩阵(0,1)*第二个矩阵(1,0)=1*1+2*3=7
所以我的思路就放在如何将不同矩阵的行与列的数值之间在数组中的索引进行统一上
即一个索引值可以既表示第一个矩阵的第一行,同时也可以表示第二个矩阵的第一列:详见代码
注意事项:
参考代码:
n, m = map(int, input().strip().split()) matrix_row = [] matrix_column = [] for i in range(n): matrix_row.extend(list(map(int, input().strip().split()))) # 将矩阵以行为存储顺序 if m == 0: # 幂次数为0时为特殊矩阵,除对角线为1,其余位置均为0 for a in range(n): for b in range(n): if a == b: print(1, end = " ") else: print(0, end = " ") print() else: for p in range(n): for q in range(n): matrix_column.append(matrix_row[p + q * n]) # 此处为核心!!!将矩阵以列为存储顺序重排 matrix_mul = matrix_row.copy() # 存储当前矩阵值 for a in range(m - 1): temp = [] for r in range(n): for c in range(n): # 注意!此处不能直接将得到的值立刻覆盖原矩阵值,否则下面代码会调用修改后的当前矩阵值,导致后续数据错误 temp.append(sum( list(map(lambda x, y: x * y, matrix_mul[r * n:(r + 1) * n], matrix_column[c * n:(c + 1) * n])))) matrix_mul = temp # 每乘完完整的一个矩阵,就更新一次矩阵值 for r in range(n): for c in range(n): print(matrix_mul[r * n + c], end = " ") print()
0.0分
1 人评分
买不到的数目 (C++代码)浏览:909 |
【明明的随机数】 (C++代码)浏览:834 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:400 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:818 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:624 |
字符逆序 (C语言代码)浏览:506 |
Tom数 (C语言代码)浏览:758 |
数组与指针的问题浏览:760 |
C二级辅导-公约公倍 (C语言代码)浏览:537 |