# 文件命名为matmul.py,矩阵数据写在matrix.txt文件中from mrjob.job import MRJob
import numpy as np
# M为矩阵A的行数,N为矩阵B的列数
M, N =3,3classMatrixMultiplication(MRJob):defmapper(self, _, line):# 根据数据的格式,解析输入并区分矩阵A和矩阵B的元素# 假设输入格式为 (i, j, matrix_name, value)
i, j, matrix_name, value = line.split()if matrix_name =='A':for k inrange(1, N+1):yield(int(i), k),(matrix_name,int(j),int(value))else:for k inrange(1, M+1):yield(k,int(j)),(matrix_name,int(i),int(value))defreducer(self, key, values):
A_set, B_set =[],[]for v in values:if v[0]=='A':
A_set.append(v)else:
B_set.append(v)
res =0for v1 in A_set:for v2 in B_set:if v2[1]== v1[1]:
res += v1[2]*v2[2]breakyield key, res
if __name__ =='__main__':
MatrixMultiplication.run()print("np:", np.matmul(np.array([[2,1,3,4],[10,-8,7,2],[9,1,6,-2]]), np.array([[3,2,-8],[1,5,2],[4,-7,3],[4,1,-7]])))