题目描述
如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的:
原型:
voidmatrix_multiply(int *m1,int *m2,int *r, int x, int y, int z);
输入参数:
int *m1:x行y列的矩阵(array1[x][y])
int *m2:y行z列的矩阵(array2[y][z])
int x:矩阵m1的行数
int y:矩阵m1的列数/矩阵m2的行数
int z:矩阵m2的列数
输出参数:
int *r:矩阵m1, m2相乘的结果(array3[x][z])
返回值:
void
输入描述:
输入说明: 1、第一个矩阵的行数 2、第一个矩阵的列数和第二个矩阵的行数 3、第二个矩阵的列数 4、第一个矩阵的值 5、第二个矩阵的值
输出描述:
输出两个矩阵相乘的结果
示例1
输入
2 2 2 3 8 8 0 9 0 18 9
输出
171 72 72 0
# -*- coding: utf-8 -*-
'''
该题思路:
1.将输入转化成矩阵
2.将第二个矩阵转置
3.定义两个列表中元素相乘在求和的方法--》将第一个矩阵与第二个矩阵转置的行相乘得到结果
4.输出格式的调整
'''
while True:
try:
A_H=int(input())
A_L=B_H=int(input())
B_L=int(input())
mat1=[]
mat2=[]
#将输入形成矩阵1
for i in range(A_H):
line1=input().split()
line1=[int(x) for x in line1]
mat1.append(line1)
#将输入形成矩阵2
for j in range(B_H):
line2=input().split()
line2=[int(x) for x in line2]
mat2.append(line2)
#求第二个矩阵的转置
mat2_T=[]
for i in range(B_L):
raw = []
for j in range(B_H):
raw.append(mat2[j][i])
mat2_T.append(raw)
#第一个矩阵的行与第二个元素的列中各元素相乘,返回相加结果
def muti(l1,l2):
add=0
for i in range(len(l1)):
add+=l1[i]*l2[i]
return add
# 转化为输出格式
for i in range(A_H):
for j in range(B_L-1 ):
#打印第一个矩阵的行与第二个元素的列中各元素相乘结果
print(muti(mat1[i], mat2_T[j]), end=' ')
print(muti(mat1[i], mat2_T[-1]))
except:
break