python编写矩阵乘法函数_Python+MapReduce实现矩阵相乘

该博客介绍了如何使用Python的MapReduce模型实现矩阵乘法。在map阶段,矩阵A和B的元素被重新标记并分组,为reduce阶段的计算做好准备。reduce阶段根据标记的元素位置进行相乘并累加,最终得到矩阵C的元素。博客还提供了mapper和reducer的Python代码示例。
摘要由CSDN通过智能技术生成

算法原理

map阶段

在map阶段,需要做的是进行数据准备。把来自矩阵A的元素aij,标识成p条的形式,key="i,k",(其中k=1,2,...,p),value="a:j,aij";把来自矩阵B的元素bij,标识成m条形式,key="k,j"(其中k=1,2,...,m),value="b:i,bij"。

经过处理,用于计算cij需要的a、b就转变为有相同key("i,j")的数据对,通过value中"a:"、"b:"能区分元素是来自矩阵A还是矩阵B,以及具体的位置(在矩阵A的第几列,在矩阵B的第几行)。

shuffle阶段

这个阶段是Hadoop自动完成的阶段,具有相同key的value被分到同一个Iterable中,形成对,再传递给reduce。

reduce阶段

通过map数据预处理和shuffle数据分组两个阶段,reduce阶段只需要知道两件事就行:

对经过计算得到的是矩阵C的哪个元素?因为map阶段对数据的处理,key(i,j)中的数据对,就是其在矩阵C中的位置,第i行j列。

Iterable中的每个value来自于矩阵A和矩阵B的哪个位置?这个也在map阶段进行了标记,对于value(x:y,z),只需要找到y相同的来自不同矩阵(即x分别为a和b)的两个元素,取z相乘,然后加和即可。

过程如下图所示:

算法实现

mapper.py

#!/usr/bin/env python3

import sys

flag = 0 # 0表示输入A、B矩阵信息,1表示处理A矩阵,2表示处理B矩阵

row_a, col_a, row_b, col_b = 0, 0, 0, 0 # A、B矩阵shape

current_row = 1 # 记录现在处理矩阵的第几行

def read_input():

for lines in sys.stdin:

yield lines

if __name__ == '__main__':

for line in read_input():

if line.count('\n') == len(line): # 去空行

pass

data = line.strip().split('\t')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值