文章目录
前言
大概是最后一次参加蓝桥杯,Python组模拟题练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢!
问题描述
输入两个矩阵,分别是ms,sn大小。输出两个矩阵相乘的结果。
输入格式
第一行,空格隔开的三个正整数m,s,n(均不超过200)。
接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-3 2
-8 2
提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)(0,1,3) = 1 * 0 +01+(-1)*3=-3
数据规模与约定
时间限制:1.0s 内存限制:256.0MB
解答
1. 代码:
误解85分(超时):
a=list(map(int,input().split()))#m,s,n
b=[[0 for i in range(a[1])] for j in range(a[0])]#第1个矩阵
for i in range(a[0]):
c=list(map(int,input().split()))
for j in range(a[1]):
b[i][j]=c[j]
d=[[0 for i in range(a[2])] for j in range(a[1])]#第2个矩阵
for i in range(a[1]):
c=list(map(int,input().split()))
for j in range(a[2]):
d[i][j]=c[j]
e=[[0 for i in range(a[2])] for j in range(a[0])]#相乘后的矩阵
for i in range(a[0]):
for j in range(a[2]):
for m in range(a[1]):
e[i][j]+=b[i][m]*d[m][j]
print(e[i][j],end=' ')
print('\t')
误解85分(超时):
a=list(map(int,input().split()))#m,s,n
b=[]#第1个矩阵
for i in range(a[0]):
b+=list(map(int,input().split()))
c=[]
for i in range(a[1]):#第2个矩阵
c+=list(map(int,input().split()))
e=[]#第2个矩阵转置
for i in range(a[2]):
f=i
for j in range(a[1]):
e.append(c[f])
f+=a[2]
d=[]#相乘后的矩阵
for i in range(a[0]):
for j in range(a[2]):
s=0
for k in range(a[1]):
s+=b[i*a[1]+k]*e[j*a[1]+k]
print(s,end=' ')
print('\t')
2. 重点知识:
- python初始化二维数组:
[[0 for i in range(a)] for j in range(b)]
a为列数,b为行数