matlab 逐行相乘,matlab – 逐行乘以两个矩阵

矢量化方法

你可以在A和B的转置之间进行矩阵乘法,然后沿着dim-2求和,最后用L – 进行元素划分.

result = sum(A.*B.',2)./L

标杆

本节介绍了针对基于循环的方法的提议方法的运行时和加速测试,如问题的早期部分所列.请注意

在问题的第二部分中提出的另一种基于诊断的方法没有在这些测试中涵盖,因为它的运行时间相对非常

大数字.

基准代码

N_arr = 4000:4000:100000; %// Datasizes

timeall = zeros(2,numel(N_arr)); %// Array to store runtimes

for iter = 1:numel(N_arr)

%// Create random inputs

N = N_arr(iter);

A=rand(N,4); B=rand(4,N); L=rand(N,1);

%// Time the approaches

f = @() mult_twomat_loopy(A,B,L);

timeall(1,iter) = timeit(f); clear f

f = @() mult_twomat_vect(A,B,L);

timeall(2,iter) = timeit(f); clear f

end

%// Plot speedups

figure,hold on,grid on

plot(N_arr,timeall(1,:)./timeall(2,:),'-bo')

xlabel('Datasize, N(Rows in A)'),ylabel('Speedup Factor (x)')

title('Speedup Plot')

相关的功能代码

mult_twomat_loopy.m:

function result = mult_twomat_loopy(A,B,L)

N = size(A,1);

result = zeros(N,1);

for i=1:N

result(i)=A(i,:)*B(:,i)/L(i);

end

mult_twomat_vect.m:

function result = mult_twomat_vect(A,B,L)

result = sum(A.*B.',2)./L;

提议方法的优先级高于循环方法

结论

从加速图可以看出,提出的方法似乎是解决问题的一个非常好的选择.从情节中有趣的观察结果是针对32K数据化的循环方法提出的方法的性能突然下降.这种下降背后的原因似乎是系统内存带宽在这么大的数据量上追回性能,但幸运的是,即使对于这样的数据,加速仍然相当保持在20倍以上.

MATLAB中的矩阵相乘是通过使用乘法运算符(*)来实现的。矩阵相乘的规则是,矩阵A乘以矩阵B时,矩阵A的列数必须等于矩阵B的行数。具体的计算方法是,矩阵A的每一行与矩阵B的对应列的数据相乘再相加,得到的值作为新的矩阵的数据。例如,如果有矩阵A和矩阵B,可以使用以下代码进行矩阵相乘: A = \[2,4;3,1;2,5\]; B = \[3,1,4;2,1,2\]; C = A * B; 注意,矩阵相乘不满足交换定律,即A * B不一定等于B * A。\[1\] 另外,MATLAB还提供了矩阵的点乘运算,使用点乘运算符(.*)。矩阵的点乘要求两个矩阵的行数和列数必须相等,然后对应位置的元素相乘,得到的最终结果是一个与原矩阵维度相同的矩阵。例如,可以使用以下代码进行矩阵的点乘: A = \[2,4;3,1;2,5\]; B = \[3,1;4,2;1,2\]; C = A .* B; 点乘满足交换律,即A .* B等于B .* A。\[1\] 此外,当矩阵与行向量(只有1行)点乘时,要求行向量的列数与矩阵的列数相等。当矩阵与列向量(只有1列)点乘时,要求列向量的行数与矩阵的行数相等。\[1\] 总结来说,MATLAB中的矩阵相乘使用乘法运算符(*),矩阵的点乘使用点乘运算符(.*),并且矩阵相乘和点乘有不同的规则和性质。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* [matlab中的矩阵点乘(.*)和乘法(*)](https://blog.csdn.net/ftf15111099814/article/details/113920448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [matlab矩阵点乘和乘的区别(超级简单)](https://blog.csdn.net/weixin_40857506/article/details/125620782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值