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

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

        已知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 matrix

    X_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 matrix
    
    d = size(X,1);
    h = size(Y,1);
    [m,q] = size(C);
    if q<m
        Z = zeros(d,h);%dxh
        for jj=1:q
            y_j = Y(:,jj)';%1xh
            c_j = C(:,jj)';%1xm
            X_c = bsxfun(@times, X, c_j);%dxm
            X_sum = sum(X_c,2);%dx1
            Z = Z + X_sum*y_j;%dxh
        end       
    else
        Z = zeros(d,h);%dxh
        for ii=1:m
            x_i = X(:,ii);%dx1
            c_i = C(ii,:);%1xq
            Y_c = bsxfun(@times, Y, c_i);%hxq
            Y_sum = sum(Y_c,2);%hx1
            Z = Z + x_i*Y_sum';%dxh
        end 
    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:m
    x_i = X(:,ii);
    for jj=1:q
        y_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.mfbz.cn/a/578185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【b站李同学的Lee】Part 3 服务器开发 NodeJS+Gulp基础入门+实战

课程地址&#xff1a;【NodeJSGulp基础入门实战】 https://www.bilibili.com/video/BV1aE411n737/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 9 服务器端基础概念 9.1 网站的组成 9.2 Node网站服务器 9.3 IP地址 9.4 域名 9.5 端口 9…

SCSS全局配置 vue项目(二)

目录 1、先要查看node版本 2、安装对应的node-sass、sass-loader版本 2.1根据项目使用的node版本安装对应的node-sass版本 2.2根据node-sass版本选择兼容的sass-loader版本&#xff0c;不然项目无法正常运行 3、在 vue.config.js 中配置&#xff1a; 4、在组件中…

刷题训练之前缀和

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握前缀和算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

物联网的基本功能及五大核心技术——青创智通

工业物联网解决方案-工业IOT-青创智通 物联网基本功能 物联网的最基本功能特征是提供“无处不在的连接和在线服务”&#xff0c;其具备十大基本功能。 &#xff08;1&#xff09;在线监测&#xff1a;这是物联网最基本的功能&#xff0c;物联网业务一般以集中监测为主、控制为…

Vitis HLS 学习笔记--C/C++ static 关键字的作用

目录 1. 简介 2. c/c共有性质 3. c独有性质 4. 示例说明 5. static 对于 HLS 工具的影响 6. 总结 1. 简介 在Vitis HLS中&#xff0c;偶尔会用到 static 关键字。考虑到Vitis HLS同时兼容C和C语言&#xff0c;有必要理解这两种语言中static关键字细微差异。本文旨在梳理…

Centos7.9系统MySQL5.7.32升级为5.7.44(生成环境操作)

1.背景 由于客户进行等保漏扫和渗透&#xff0c;生成环境mysql数据库被扫描出了 高危漏洞。 如图&#xff1a;部分漏洞 查看漏洞详细信息&#xff0c;建议升级到指定版本解决&#xff1a; 说明&#xff1a; 本文仅适合使用当前数据库为 RPM 安装方式 2.升级前准备 查看环…

串口服务器可以直接连接工业路由器吗

串口服务器可以直接连接工业路由器吗 在工业物联网的架构中&#xff0c;串口服务器和工业路由器都是不可或缺的重要组件。串口服务器的主要功能是将串口通信转换为网络通信&#xff0c;实现数据的远程传输和管理&#xff1b;而工业路由器则负责在工业环境中提供稳定、可靠的网…

QT入门:计算圆面积的QT开始以及日历相关

QT入门&#xff1a;计算圆面积的QT开始以及日历相关 使用的工具为Qt creator 如图所示的为Qt的一个基本目录&#xff0c;首先打开mainwindow.ui进行设计&#xff0c;首先是讲解日历的&#xff0c;可以完全不用写代码&#xff0c;只在mainwindow.ui即可实现。 这是最后的一个成…

YES-2000B数显压力试验机技术方案书

一、简介 本机采用主机与液压系统集于一体的结构形式&#xff0c;结构紧凑&#xff0c;小巧玲珑。采用液压加荷、电子测力&#xff0c;具有加荷数率显示&#xff0c;峰值保持等功能&#xff0c;并配有微型打印机。 外观示意图 二、 液压系统 油箱内的液压油通过电机带动高压…

带宽内存服务器爆满,阿里云木马排查过程

服务器的连接数和带宽都暴增&#xff0c;导致项目直接宕机&#xff0c;无法使用的解决方案。 查看服务器实时流量 服务器内执行命令&#xff1a; yum install iftop -y iftop -Pn查看日志&#xff0c;发现服务器在对外访问 .148.232.186 的443端口。 于是设置安全组出方…

前端HTML5学习1(新增布局,状态,列表,文本,表单控件标签)

前端HTML5学习1&#xff08;新增布局&#xff0c;状态&#xff0c;列表&#xff0c;文本&#xff0c;表单控件标签&#xff09; 新增布局标签新增状态标签新增列表标签新增文本标签新增表单控件属性input新增属性值 新增布局标签 HTML5 引入了许多新的语义化标签&#xff0c;用…

各省铁路里程、公路里程、交通网密度面板数据(2000-2022年)

01、数据简介 铁路里程是指铁路线从起点到终点的公里数&#xff0c;通常用于表示铁路线路的长度。 公路里程是指一定时期内实际达到《公路工程技术标准》规定的等级公路&#xff0c;并经公路主管部门正式验收交付使用的公路里程数。 交通网密度是指某一区域内交通线路的密集…

直播任我行,智享AI自动直播手机塑造直播新风潮,引领行业“风口”

直播任我行&#xff01;智享AI自动直播手机塑造直播新风潮&#xff0c;引领行业“风口”&#xff01; 直播作为一种受欢迎的互联网传播方式&#xff0c;如今在帮助商家推广产品并获得更多收益方面发挥着重要作用。 在直播电商领域&#xff0c;主播是连接品牌和用户之间的关键纽…

js如何点击生成4位随机数

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Generat…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …

2024蓝桥杯CTF--逆向

蓝桥杯付费CT--逆向 题目&#xff1a;RC4题目&#xff1a;happytime总结&#xff1a; 题目&#xff1a;RC4 先查壳&#xff0c;无壳&#xff0c;并且是32位&#xff1a; 用32位的ida打开&#xff0c;直接定位到main函数&#xff1a; 重点关注sub_401005函数&#xff0c;这个应…

基于Kubernetes部署free5gc核心网

说明&#xff1a; 本文仅适合个人对5gc核心网感兴趣测、研究使用。 操作系统版本&#xff1a; # uname -r 5.4.0-177-generic # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.5 LTS Release: 20.04 Codename: …

spring boot3单模块项目工程搭建-上(个人开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 常规目录创建 common目录 exception.handle目录 result.handle目录 controller目录 service目录 mapper目录 entity目录 test目录 写在最后 写在前面 本文…

CSS学习(选择器、盒子模型)

1、CSS了解 CSS&#xff1a;层叠样式表&#xff0c;一种标记语言&#xff0c;用于给HTML结构设置样式。 样式&#xff1a;文字大小、背景颜色等 p标签内不能嵌套标题标签。 px是相对于分辨率而言的&#xff0c; em是相对于浏览器的默认字体&#xff0c; rem是相对于HTML根元…

更易使用,OceanBase开发者工具 ODC 4.2.4 版本升级

亲爱的朋友们&#xff0c;大家好&#xff01;我们的ODC&#xff08;OceanBase Developer Center &#xff09;再次迎来了重要的升级V 4.2.4&#xff0c;这次我们诚意满满&#xff0c;从五个方面为大家精心打造了一个更加易用、贴心&#xff0c;且功能更强的新版本&#xff0c;相…