当前位置: 首页 > news >正文

MapReduce编程——矩阵乘法(Python版本)

数据格式

  • 对于矩阵元素 A i j A_{ij} Aij,将其处理为 < i , j , M a t r i x N a m e , v a l u e > <i,j,MatrixName,value> <i,j,MatrixName,value>的四元组格式,例如矩阵[[2, 1, 3, 4], [10, -8, 7, 2], [9, 1, 6, -2]]可被转化为如下形式
    1 1 A 2
    1 2 A 1
    1 3 A 3
    1 4 A 4
    2 1 A 10
    2 2 A -8
    2 3 A 7
    2 4 A 2
    3 1 A 9
    3 2 A 1
    3 3 A 6
    3 4 A -2
    

程序说明

  • 假设有矩阵 A m × q A_{m \times q} Am×q B q × n B_{q \times n} Bq×n相乘,且矩阵 A A A B B B都被转化为了以上格式存储在一个txt文件中

Map函数

  • Map函数接收一个四元组 < i , j , M a t r i x N a m e , v a l u e > <i,j,MatrixName,value> <i,j,MatrixName,value>作为输入,对于 A i j A_{ij} Aij返回键值对 < < i , k > , < A , j , v a l u e > > ( k = 1 , 2 , 3 , . . . , n ) <<i,k>,<A,j,value>>(k=1,2,3,...,n) <<i,k>,<A,j,value>>(k=1,2,3,...,n);对于 B i j B_{ij} Bij返回键值对 < < k , j > , < B , i , v a l u e > > ( k = 1 , 2 , 3 , . . . , m ) <<k,j>,<B,i,value>>(k=1,2,3,...,m) <<k,j>,<B,i,value>>(k=1,2,3,...,m)

Reduce函数

  • Reduce函数接收shuffle后得到的键值对 < < i , k > , < < 来自 A 的第 i 行 > , < 来自 B 的第 k 列 > > > <<i,k>,<<来自A的第i行>,<来自B的第k列>>> <<i,k>,<<来自A的第i>,<来自B的第k>>>,此时只需使得A与B中对应的元素相乘再相加即可得到结果 C i j C_{ij} Cij

代码

# 文件命名为matmul.py,矩阵数据写在matrix.txt文件中
from mrjob.job import MRJob
import numpy as np# M为矩阵A的行数,N为矩阵B的列数
M, N = 3, 3class MatrixMultiplication(MRJob):def mapper(self, _, line):# 根据数据的格式,解析输入并区分矩阵A和矩阵B的元素# 假设输入格式为 (i, j, matrix_name, value)i, j, matrix_name, value = line.split()if matrix_name == 'A':for k in range(1, N+1):yield (int(i), k), (matrix_name, int(j), int(value))else:for k in range(1, M+1):yield (k, int(j)), (matrix_name, int(i), int(value))def reducer(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, resif __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]])))

运行命令

python matmul.py -r inline matrix.txt

相关文章:

MapReduce编程——矩阵乘法(Python版本)

数据格式 对于矩阵元素 A i j A_{ij} Aij​&#xff0c;将其处理为 < i , j , M a t r i x N a m e , v a l u e > <i,j,MatrixName,value> <i,j,MatrixName,value>的四元组格式&#xff0c;例如矩阵[[2, 1, 3, 4], [10, -8, 7, 2], [9, 1, 6, -2]]可被转化…...

nature日报:为什么印度德里现在的空气污染如此严重?

为什么印度德里现在的空气污染如此严重&#xff1f; 后季风季节为印度大城市的空气污染积累创造了理想的条件。 本文整理扩展自2023年11月10日nature杂志的NEWS EXPLAINER——Why is Delhi’s air pollution so bad right now? (nature.com) Highlights 季风期间&#xff0…...

ChatGPT、GPT-4 Turbo接口调用

接口地址 https://chat.xutongbao.top/api/light/chat/createChatCompletion 请求方式 post 请求参数 model可选值&#xff1a; “gpt-3.5-turbo-1106”、 “gpt-3.5-turbo-16k” 、 “gpt-4”、“gpt-4-1106-preview”。 默认值为&#xff1a; “gpt-3.5-turbo-1106” to…...

IDEA中常用的调试快捷键

启动调试 对于Maven项目&#xff1a;Shift F9 对于普通项目&#xff1a;Shift F10 进入调试模式 Shift F9 逐行执行 逐行跳过&#xff1a;F8 逐行步入&#xff1a;F7 逐行步出&#xff1a;Shift F8 继续执行 F9 停止调试 Ctrl F2 设置断点 在代码行号左侧双击&#x…...

需要设计易清洗的口琴

我发现口琴很容易被异物影响。然后就需要清洗。正好手头有一个合适的螺丝刀&#xff0c;还比较方便。 反之一想&#xff0c;应该设计一种口琴&#xff0c;可以方便的拆开&#xff0c;用水清洗。晾干后就能组装。设计上当然会面临一些问题&#xff0c;比如音簧容易变音等。这个可…...

贝锐蒲公英智慧运维方案:实现远程网络监控、管理、维护工业设备

为了提升运维效率&#xff0c;能够及时发现和响应设备的故障、异常和潜在问题。 越来越多的企业都在搭建“集中式”的远程智慧运维体系&#xff0c;以提高运维效率和降低成本。 但是&#xff0c;受限于网络&#xff0c;将不同地域的资源和信息进行整合&#xff0c;实现统一管理…...

Intel oneAPI笔记(4)--jupyter官方文档(Unified Shared Memory)学习笔记

前言 本文是对jupyterlab中oneAPI_Essentials/03_Unified_Shared_Memory文档的学习记录&#xff0c;主要包含对统一共享内存的讲解 USM概述 USM (Unified Shared Memory)是SYCL中基于指针的内存管理。对于使用malloc或new来分配数据的C和C程序员来说应该很熟悉。当将现有的C…...

dRep-基因组质控、去冗余及物种界定

文章目录 Install依赖关系 常用命令常见问题pplacer线程超过30报错当比较基因组很多&#xff08;>4096&#xff09;有了Bdv.csv文件后无需输入基因组list 超多基因组为什么需要界定种&#xff1f;dRep重要概念次级ANI的选择Minimum alignment coverage3. 选择有代表性的基因…...

截图贴图软件推荐 - 附下载链接 | Snipaste | Steuna

截图贴图软件推荐 - 附下载链接 | Snipaste | Steuna 前言下载链接Snipaste&#xff08;推荐&#xff09;Steuna 前言 Win系统下截图软件多种多样&#xff0c;但贴图软件少之又少&#xff0c;本文介绍2个带有贴图功能的截图软件&#xff0c;分别是Snipaste和Steuna。可将截图固…...

python调用chrome实现网页自动操作

一. 内容简介 python调用chrome实现网页自动操作。 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接&#xff1a; 三.主要流程 3.1 下载驱动和插件 调用谷歌浏览器&#xff0c;需要下载浏览器驱动&#xff08;https://registry.npmmirror.co…...

FFMPEG库实现mp4/flv文件(H264+AAC)的封装与分离

ffmepeg 4.4&#xff08;亲测可用&#xff09; 一、使用FFMPEG库封装264视频和acc音频数据到 mp4/flv 文件中 封装流程 1.使用avformat_open_input分别打开视频和音频文件&#xff0c;初始化其AVFormatContext&#xff0c;使用avformat_find_stream_info获取编码器基本信息 2.使…...

《红蓝攻防对抗实战》九.内网穿透之利用GRE协议进行隧道穿透

​ 前文推荐&#xff1a; 《红蓝攻防对抗实战》一. 隧道穿透技术详解 《红蓝攻防对抗实战》二.内网探测协议出网之TCP/UDP协议探测出网 《红蓝攻防对抗实战》三.内网探测协议出网之HTTP/HTTPS协议探测出网 《红蓝攻防对抗实战》四.内网探测协议出网之ICMP协议探测出网 《红蓝…...

大数据毕业设计选题推荐-智慧消防大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

LeetCode 面试题 16.20. T9键盘

文章目录 一、题目二、C# 题解 一、题目 在老式手机上&#xff0c;用户通过数字键盘输入&#xff0c;手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列&#xff0c;实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射…...

systemctl enable docker.service报错“Failed to execute operation: Bad message“

将docker加入到开机自启&#xff0c;报错&#xff1a; 解决&#xff1a; 重新粘贴复制&#xff1a; [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target…...

向量的范数、矩阵的范数

向量的范数 p-范数 常用的0-范数、1-范数、2-范数、无穷-范数其实都是p-范数的特殊情形。 0-范数 当p0时&#xff0c;表示0-范数。它比较特殊&#xff0c;本质是一种计数&#xff0c;表示向量中非0元素的个数。 1-范数&#xff08;也称L1范数&#xff09; 当p1时&#xff…...

C# OpenCvSharp 玉米粒计数

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*|*.bmp;…...

前端缓存机制——强缓存、弱缓存、启发式缓存

强缓存和弱缓存的主要区别是主要区别在于缓存头携带的信息不同。 强缓存&#xff1a; 浏览器发起请求&#xff0c;查询浏览器的本地缓存&#xff0c;如果找到资源&#xff0c;则直接在浏览器中使用该资源。若是未找到&#xff0c;或者资源已过期&#xff0c;则浏览器缓存返回未…...

对称密钥加密与非对称密钥加密:原理与应用

在信息安全领域&#xff0c;对称密钥加密和非对称密钥加密是两种重要的加密方法&#xff0c;它们各有特点&#xff0c;适用于不同的场景。本文将详细介绍这两种加密方法的原理&#xff0c;并通过实例说明其应用&#xff0c;同时阐述在报文传输过程中&#xff0c;何时使用对称密…...

商品小类管理实现B

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.java1234.mapper.SmallType…...

从花瓶到咖啡杯:SolidWorks抽壳命令的两种高级用法,CaTICs 3D01-01与3D05_L02-B对比教学

从花瓶到咖啡杯&#xff1a;SolidWorks抽壳命令的两种高级用法实战解析 在工业设计领域&#xff0c;抽壳命令看似简单&#xff0c;却能直接影响建模效率与成品质量。今天我们就以CaTICs竞赛中的两个经典案例——轴对称花瓶&#xff08;3D01-01&#xff09;与带手柄斜口杯&#…...

用Python脚本解放双手:Epson V370扫描仪批量处理老照片实战

Python自动化扫描&#xff1a;Epson V370老照片数字化全攻略 每次翻看泛黄的老照片时&#xff0c;你是否想过把这些珍贵的记忆永久保存下来&#xff1f;但面对堆积如山的相册&#xff0c;手动一张张扫描又让人望而却步。作为一名经历过这个痛苦过程的开发者&#xff0c;我想分享…...

模拟社会:在虚拟环境中训练AI Agent

模拟社会:在虚拟环境中训练AI Agent 关键词:多智能体强化学习(MARL)、社会模拟引擎、认知架构涌现、通用人工智能(AGI)预训练、社会契约理论AI化、零样本社会能力迁移、仿真伦理对齐 摘要 从AlphaGo在棋盘上的单一博弈胜利,到GPT系列在语言符号上的通用能力涌现,人工…...

从GitHub README到技术博客:让Mermaid流程图成为你的Markdown加分项

技术文档可视化革命&#xff1a;用Mermaid打造专业级Markdown图表 在技术写作的世界里&#xff0c;清晰的表达往往比复杂的实现更重要。想象一下&#xff0c;当你试图在GitHub README中解释一个微服务架构&#xff0c;或者在技术博客中描述一个算法流程时&#xff0c;纯文字描述…...

OpenWrt编译后,bin和build_dir目录里到底藏着什么?新手必看的文件结构详解

OpenWrt编译后文件结构完全指南&#xff1a;从bin到build_dir的深度解析 刚完成第一次OpenWrt编译的新手&#xff0c;面对满屏的文件夹和文件&#xff0c;往往会陷入"我是谁&#xff1f;我在哪&#xff1f;"的迷茫状态。bin目录下那些密密麻麻的.bin文件哪个才是真正…...

Pandas数据导出实战:to_csv参数详解与高效应用场景

1. Pandas数据导出基础&#xff1a;to_csv方法入门 第一次接触Pandas的数据导出功能时&#xff0c;我完全被to_csv的各种参数搞晕了。记得当时为了把一个简单的DataFrame保存成CSV文件&#xff0c;我反复尝试了十几次才成功。现在回头看&#xff0c;其实掌握几个核心参数就能解…...

为什么DeepMind放弃通用智能路径,而华为盘古、通义千问坚持AGI架构?——基于17家机构2023–2024技术路线图的逆向推演(含未公开专利链分析)

第一章&#xff1a;AGI研发的国际竞争格局 2026奇点智能技术大会(https://ml-summit.org) 全球通用人工智能&#xff08;AGI&#xff09;研发已进入国家战略竞速阶段&#xff0c;美、中、欧、日、韩等主要经济体正通过顶层政策设计、大规模算力基建投入与前沿基础模型研究形成…...

终极指南:如何快速掌握OpenBoardView开源电路板查看器的完整使用技巧

终极指南&#xff1a;如何快速掌握OpenBoardView开源电路板查看器的完整使用技巧 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 你是否曾为复杂的电路板文件分析而烦恼&#xff1f;面对密密麻麻的元器件布…...

终极指南:如何用RL4CO快速解决复杂组合优化问题

终极指南&#xff1a;如何用RL4CO快速解决复杂组合优化问题 【免费下载链接】rl4co A PyTorch library for all things Reinforcement Learning (RL) for Combinatorial Optimization (CO) 项目地址: https://gitcode.com/gh_mirrors/rl/rl4co 你是否曾为物流配送路线规…...

从Kaggle竞赛到工业部署:语义分割指标mIoU、Dice Score到底该怎么选?

从Kaggle竞赛到工业部署&#xff1a;语义分割指标mIoU、Dice Score到底该怎么选&#xff1f; 在计算机视觉领域&#xff0c;语义分割技术的应用场景正变得越来越广泛。无论是Kaggle竞赛中的算法比拼&#xff0c;还是自动驾驶、医疗影像分析等工业级应用&#xff0c;选择合适的评…...