矩阵按列相乘运算的并行化实现方法

        这两天一直在琢磨如下矩阵计算问题。

        已知d×m矩阵X和h×q矩阵Y,求如下矩阵:

其中X(:,i), Y(:,j)分别表示矩阵X, Y的第i列和第j列,易知Z为d×h矩阵。

        如果直接串行计算矩阵Z,两个循环共有m×q,则会很慢,能不能并行化呢?

        实际上是可以的,为便于理解,我们先把Z写成如下形式:

对于矩阵Z中的第(r,s)个元素:

.

注意到第一个括号是X的第r行之和,第二个括号是Y的第s行之和。

        也就是说,矩阵Z中的第(r,s)个元素等于X的第r行之和乘以Y的第s行之和。因此,可以先分别将X和Y所有列对应相加,得到长为d的列向量Xsum和长为h的列向量Ysum,则Z等于Xsum乘以Ysum的转置。实际上,推导可以不用这么麻烦,对于目标计算式:

 

注意到第一个括号是将X所有列对应相加,第二个括号是将Y所有列对应相加,因此Z也就是前面提到的Xsum乘以Ysum的转置。

        Matlab代码如下:

function [ Z ] = Mtx_Col_Multi( X, Y )
% Mtx_Col_Multi returns Z = \sum_{i=1}^{m}\sum_{j=1}^{q} X(:,i)*Y(:,j)'
% Here, X(:,i) and Y(:,j) denote the i-th and j-th column of X and Y, respectively
% INPUT:
% X     - A dxm matrix
% Y     - A hxq matrix
% OUTPUT:
% Z     - A dxh matrixX_sum = sum(X,2);Y_sum = sum(Y,2);Z = X_sum*Y_sum';%dxh%     %This function implements the following procedure in parallel
%     Z = zeros(d,h);%dxh
%     for ii=1:m
%         x_i = X(:,ii);
%         for jj=1:q
%             y_j = Y(:,jj)';
%             Z = Z + x_i*y_j;
%         end
%     end    
end

        其实我真正想计算的是如下运算,里面包含一个系数:

其中C(i,j)是一个系数,是矩阵C中的第(i,j)个元素。那么这个运算能不能并行化呢?

        使用类似的思想:

 因此,可以编写如下函数:

function [ Z ] = Mtx_Coef_Col_Multi( X, Y, C )
% Mtx_Coef_Col_Multi returns Z = \sum_{i=1}^{m}\sum_{j=1}^{q} C(i,j)*X(:,i)*Y(:,j)'
% Here, X(:,i) and Y(:,j) denote the i-th and j-th column of X and Y, respectively
% C(i,j) denotes the item in i-th row and j-th column of C.
% INPUT:
% X     - A dxm matrix
% Y     - A hxq matrix
% C     - A mxq matrix
% OUTPUT:
% Z     - A dxh matrixd = size(X,1);h = size(Y,1);[m,q] = size(C);if q<mZ = zeros(d,h);%dxhfor jj=1:qy_j = Y(:,jj)';%1xhc_j = C(:,jj)';%1xmX_c = bsxfun(@times, X, c_j);%dxmX_sum = sum(X_c,2);%dx1Z = Z + X_sum*y_j;%dxhend       elseZ = zeros(d,h);%dxhfor ii=1:mx_i = X(:,ii);%dx1c_i = C(ii,:);%1xqY_c = bsxfun(@times, Y, c_i);%hxqY_sum = sum(Y_c,2);%hx1Z = Z + x_i*Y_sum';%dxhend end%     %This function implements the following procedure in parallel
%     Z = zeros(d,h);%dxh
%     for ii=1:m
%         x_i = X(:,ii);
%         for jj=1:q
%             y_j = Y(:,jj)';
%             Z = Z + C(ii,jj)*x_i*y_j;
%         end
%     end
end

可以使用如下代码测试一下上述并行化实现方法与串行实现的效率差异:

%demo for Mtx_Coef_Col_Multi
clc;clear;close;
d = 5;
m = 10000;
h = 8;
q = 50;
X = rand(d,m);
Y = rand(h,q);
C = rand(m,q);tic;
Z_serial = zeros(d,h);%dxh
for ii=1:mx_i = X(:,ii);for jj=1:qy_j = Y(:,jj)';Z_serial = Z_serial + C(ii,jj)*x_i*y_j;end
end
toc;
tic;
Z = Mtx_Coef_Col_Multi(X, Y, C);
toc;
norm(Z_serial-Z,'fro')

命令行窗口输出如下信息(有一定的随机性,每次运行结果有些差异):

时间已过 1.011418 秒。

时间已过 0.009981 秒。

ans =

   6.5505e-09

也就是在当前设置下,并行实现版本的效率提交了100倍左右。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

枚举(enum)/共用体(union)/结构体(struct)---详解

前言 C语言包含内置类型和自定义类型。 其实C语言中有内置类型&#xff0c;包含&#xff1a;char,short,int,long,long long,float,double,long double ,这些是C语言本身支持的现成的类型。 但仅仅只有内置类型是远远不够的&#xff0c;在描述一个复杂对象是无法使用内置类型来…

区块链安全应用------压力测试

测试要求&#xff1a; 1. 对以下AccountManager智能合约进行压测(基础要求set函数测试&#xff0c;balanceOf涵为20分加分项)2. 在本地链进行测试&#xff0c;需要监控本地进程的资源使用情况。每个进程的multiOutput属性为Avg3. 需要将每一个更改的配置文件截图&#xff0c;和…

政安晨:【Keras机器学习示例演绎】(十五)—— 用于图像分类的 CutMix 数据增强技术

目录 简介 设置 加载 CIFAR-10 数据集 定义超参数 定义图像预处理函数 将数据转换为 TensorFlow 数据集对象 定义 CutMix 数据增强功能 可视化应用 CutMix 扩增后的新数据集 定义 ResNet-20 模型 使用经 CutMix 扩展的数据集训练模型 使用原始非增强数据集训练模型 …

vscode 配置verilog环境

一、常用的设置 1、语言设置 安装如下插件&#xff0c;然后在config 2、编码格式设置 解决中文注释乱码问题。vivado 默认是这个格式&#xff0c;这里也设置一样。 ctrl shift p 打开设置项 3、插件信任区设 打开一个verilog 文件&#xff0c;显示是纯本文&#xff0c;没…

Xbar控制图的定义和应用

1、定义 Xbar控制图&#xff08;X-Bar Chart&#xff09;是一种统计图表&#xff0c;用于展示数据分布情况。它通过绘制一系列数据点在均值线&#xff08;通常为X轴&#xff09;周围的分布情况来显示数据的波动性。这种图表可以用来监控生产过程、质量管理、金融分析等多个领域…

【MHA】MySQL高可用MHA介绍1-功能,架构,优势,案例

目录 一 MHA 介绍 1 MHA功能 自动化主服务器监控和故障转移 交互式&#xff08;手动启动的&#xff09;主故障转移 非交互式主故障转移 在线切换主机 2 主服务器故障转移的难点 二 MHA架构 1 MHA组件 2 自定义扩展&#xff08;脚本&#xff09; 三 MHA优势 1 MHA可以…

【Godot4自学手册】第三十八节给游戏添加音效

今天&#xff0c;我的主要任务就是给游戏添加音效。在添加音效前&#xff0c;我们需要了解一个东西&#xff1a;音频总线。这个东西或许有些枯燥&#xff0c;如果你只为添加一个音效没必要了解太多&#xff0c;但如果你以后将要经常与音频播放打交道&#xff0c;还是要了解一下…

政安晨:【深度学习神经网络基础】(十三)—— 卷积神经网络

目录 概述 LeNet-5 卷积层 最大池层 稠密层 针对MNIST数据集的卷积神经网络 总之 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎…

ReentrantLock 源码解析

ReentrantLock 源码解析 文章目录 ReentrantLock 源码解析前言一、字段分析二、内部类分析1、Sync2、FairSync3、NonfairSync 三、方法分析1、构造方法2、其他方法 总结 前言 ReentrantLock 实现了 Lock 接口&#xff0c;内部基于 AQS 实现。所以想要弄懂 ReentrantLock &#…

vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)

项目截图&#xff1a; 实现方法&#xff1a; 点击左侧菜单根据元素id定位到可视内容区域。 浏览器原生提供了一种方法scrollIntoView 。 通过scrollIntoView方法可以把元素滚动到可视区域内。 behavior: "smooth"是指定滚动方式为平滑效果。 具体代码如下&#xf…

使用 PhpMyAdmin 安装 LAMP 服务器

使用 PhpMyAdmin 安装 LAMP 服务器非常简单。按照下面所示的步骤&#xff0c;我们将拥有一个完全可运行的 LAMP 服务器&#xff08;Linux、Apache、MySQL/MariaDB 和 PHP&#xff09;。 什么是 LAMP 服务器&#xff1f; LAMP 代表 Linux、Apache、MySQL 和 PHP。它们共同提供…

智能化安全防护:AI防火墙的原理与应用

随着人工智能技术的迅猛发展&#xff0c;其在各个领域的应用也日益广泛。作为引领数字化转型的重要力量&#xff0c;AI技术为我们的生活和工作带来了前所未有的便利与效率。在通信领域&#xff0c;人工智能的应用同样展现出了巨大的潜力和价值&#xff0c;特别是在网络安全防护…

HTTP/1.1,HTTP/2.0和HTTP/3.0 各版本协议的详解(2024-04-24)

1、HTTP介绍 HTTP 协议有多个版本&#xff0c;目前广泛使用的是 HTTP/1.1 和 HTTP/2&#xff0c;以及正在逐步推广的 HTTP/3。 HTTP/1.1&#xff1a;支持持久连接&#xff0c;允许多个请求/响应通过同一个 TCP 连接传输&#xff0c;减少了建立和关闭连接的消耗。 HTTP/2&#…

基于PaddlePaddle平台训练物体分类——猫狗分类

学习目标&#xff1a; 在百度的PaddlePaddle平台训练自己需要的模型&#xff0c;以训练一个猫狗分类模型为例 PaddlePaddle平台&#xff1a; 飞桨&#xff08;PaddlePaddle&#xff09;是百度开发的深度学习平台&#xff0c;具有动静统一框架、端到端开发套件等特性&#xf…

node.js 解析post请求 方法一

前提&#xff1a;依旧以前面发的node.js服务器动态资源处理代码 具体见 http://t.csdnimg.cn/TSNW9为模板&#xff0c;在这基础上进行修改。与动态资源处理代码不同的是&#xff0c;这次的用户信息我们借用表单来实现。post请求解析来获取和展示用户表单填写信息 1》代码难点&…

【项目实战】基于高并发服务器的搜索引擎

【项目实战】基于高并发服务器的搜索引擎 目录 【项目实战】基于高并发服务器的搜索引擎搜索引擎部分代码index.htmlindex.hpplog.hppparser.cc&#xff08;用于对网页的html文件切分且存储索引关系&#xff09;searcher.hpputil.hpphttp_server.cc&#xff08;用于启动服务器和…

WPForms Pro插件下载:简化您的在线表单构建,提升用户互动

在当今的数字化世界中&#xff0c;表单是网站与用户互动的关键。无论是收集信息、处理订单还是进行调查&#xff0c;一个好的表单可以极大地提升用户体验和转化率。WPForms Pro插件&#xff0c;作为一款专业的WordPress表单构建工具&#xff0c;旨在帮助您轻松创建美观、功能强…

深度学习基础:循环神经网络中的Dropout

深度学习基础&#xff1a;循环神经网络中的Dropout 在深度学习中&#xff0c;过拟合是一个常见的问题&#xff0c;特别是在循环神经网络&#xff08;RNN&#xff09;等复杂模型中。为了应对过拟合问题&#xff0c;研究者们提出了许多方法&#xff0c;其中一种被广泛应用的方法…

TensorFlow进阶一(张量的范数、最值、均值、和函数、张量的比较)

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

短视频评论ID批量爬虫提取获客软件|视频评论下载采集工具

短视频评论批量抓取软件&#xff1a;智能拓客&#xff0c;精准抓取用户反馈 主要功能一览 1. 智能抓取任务创建&#xff1a; 软件提供了任务创建功能&#xff0c;用户只需输入任务名称、搜索关键词以及评论监控词&#xff0c;即可开始智能抓取。不仅能够搜索关键词匹配的视频…