matlab咋求和,如何在matlab中对双重求和进行向量化

本文探讨了在MATLAB中如何对双重求和进行向量化操作,通过使用bsxfun函数来提高计算效率。通过比较循环版本和向量化版本的执行时间,展示了在不同维度下两者性能的差异,建议在大尺寸问题上使用向量化方法,而对于小规模问题,循环可能更为直观且效率接近。
摘要由CSDN通过智能技术生成

您可能已经知道,您应该在循环之前预先分配p:

p = zeros(Z, nR);

这可以防止数组p在每次迭代时增长,从而极大地加速循环.

你可以通过bsxfun对整个事物进行矢量化:

% C ≣ M×N×R array of all products Rmn·J0m

C = bsxfun(@times, Rmn, J0m);

% D ≣ M×N×R×Z array of all products C·sinanz

D = bsxfun(@times, C, permute(sinanz, [3 1 4 2]));

% Sum in M and N directions, and re-order

p = permute(sum(sum(D,1),2), [4 3 1 2]);

但我怀疑它会更快; MATLAB(读取:BLAS)与2D矩阵相当快,但对于更多D阵列通常不是很好.

我建议你阅读约bsxfun;它也是以你描述的方式将J0m数组减少到M×R的方法.

当然,你可以通过正确定义你的变量来摆脱这种变换,所以让我们在循环代码和矢量化代码的“理想”版本中做一个小测试:

%% Initialize some variables

% Number of tests

TESTS = 1e4;

% Your dimensions

M = 5; nR = 4;

N = 2; Z = 3;

% Some dummy data

Rmn = rand(M,N);

sinanz = rand(N,Z);

J0m = rand(M,nR); % NOTE: J0m d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值