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倍以上.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值