前言:这是一个PTA中的题目,题目要求具体如下:
即判断两个矩阵是否满足矩阵相乘的条件,满足则计算结果,这里我们先引用某位大佬的代码:
import sys
a = sys.stdin.readline().split()
l = []
for i in range(int(a[0])):
data1 = sys.stdin.readline().split()
l.append(data1)
b = sys.stdin.readline().split()
ll = []
for i in range(int(b[0])):
data2 = sys.stdin.readline().split()
ll.append(data2)
s2 = []
for i in range(int(b[1])):
s1 = []
for j in ll:
s1.append(j[i])
s2.append(s1)
if a[1] != b[0]:
print('Error: {} != {}'.format(a[1], b[0]))
else:
print('{} {}'.format(a[0], b[1]))
s3 = []
for i in l:
for j in s2:
sum1 = 0
for z in range(int(a[1])):
sum1 += int(i[z]) * int(j[z])
s3.append(sum1)
count = 0
for i in s3:
count += 1
if count % int(b[1]) == 0:
print(i)
else:
print(i, end=' ')
提交之后发现测试点样例3会有超时的现象,对此我借用了这位大佬代码中的一些想法,对代码加以复杂化(请自动忽略),但是解决了测试点运行超时的情况,提交通过
代码思路如下:
首先对于题目要求,定义函数以判断矩阵是否满足矩阵相乘的条件:
def hege(num1,num2):
if num1 == num2:
return True
else:
return False
对于主体函数,我们通过列表生成式和split()函数以快速解决输入:
num1=[int(i) for i in input().split()]#接收第一个数组的长宽
num1_list=[]
for i in range(num1[0]):#接收第一个数组的内容
temp=[eval(i) for i in input().split()]
num1_list.append(temp)
# print(num1_list)
num2=[int(i) for i in input().split()]#接收第二个数组的长宽
num2_list=[]
for i in range(num2[0]):
temp=[eval(i) for i in input().split()]#接收第二个数组
num2_list.append(temp)
#print(num2_list)
接下来通过之前定义的函数判断是否满足矩阵相乘的条件,由于这题不太适合用大循环操作,这里将使用exit()函数对不符合的用例进行退出,代码如下:
if not hege(num1[1],num2[0]):
print("Error: {} != {}".format(num1[1],num2[0]))
exit(0)#此处需要以0退出,否则测试用例会报错“返回值非零”
接下来就是设计矩阵乘法部分,此部分纯数学操作,代码如下:
length2=len(num2_list[0])#获取num2_list的元素的长度,便于后续操作
res_list=[]#定义列表存储计算结结果
for i in range(num1[0]):#由于矩阵计算的最终结果矩阵大小为num1[0] * num2[1]
temp_list=[]#接收a[i][k] * b[k][j]的结果
for j in range(length2):
temp=0
for k in range(num1[1]):
#矩阵相乘,累加一行乘以一列的结果作为res_list的一个元素
temp += (num1_list[i][k] * num2_list[k][j])
temp_list.append(temp)
res_list.append(temp_list)
最后就是输出了,这里较为简单,直接带过,代码如下:
print("{} {}".format(len(res_list),len(res_list[0])))
for i in res_list:
print(" ".join([str(j) for j in i]))#使用生成式,join函数可作用于字符型列表
最后,如果有小伙伴有其他更好的想法或意见,欢迎评论区留言,完整的代码如下:
def hege(num1,num2):
if num1 == num2:
return True
else:
return False
num1=[int(i) for i in input().split()]
num1_list=[]
for i in range(num1[0]):
temp=[eval(i) for i in input().split()]
num1_list.append(temp)
# print(num1_list)
num2=[int(i) for i in input().split()]
num2_list=[]
for i in range(num2[0]):
temp=[eval(i) for i in input().split()]
num2_list.append(temp)
if not hege(num1[1],num2[0]):
print("Error: {} != {}".format(num1[1],num2[0]))
exit(0)
# print(num2_list)
length2=len(num2_list[0])
res_list=[]
for i in range(num1[0]):
temp_list=[]
for j in range(length2):
temp=0
for k in range(num1[1]):
temp += (num1_list[i][k] * num2_list[k][j])
temp_list.append(temp)
res_list.append(temp_list)
print("{} {}".format(len(res_list),len(res_list[0])))
for i in res_list:
print(" ".join([str(j) for j in i]))