首页 > 解决方案 > 优化涉及 for 循环的 matlab 代码

问题描述

我有一个像这样的 Matlab 代码

s=[0.5 0.6 0.7];
u=[0.3618   0.9826  0.7237  0.0346  0.5525  0.0692  0.8949  0.1384 
   0.3418   0.9226  0.7213  0.0346  0.7525  0.0692  0.8949  0.1384
   0.3318   0.9326  0.7237  0.0336  0.5575  0.0792  0.8949  0.1385]
A= u(1:2:7);  % Here u is a 1-D vector and hence A
B=u(2:2:8);   % Here u is a 1-D vector and hence B

C=mod(s(1)-(A+B),1);

我想为其他两个值实现此代码,s也使用下一个8值,u即现在我的代码变为

 A=u(9:2:15);
 B=u(10:2:16);
 C=mod(s(2)-(A+B),1);

同样对于 s 的最后一个值。但每次我需要下一个8u。我如何编码以减少时间。

标签: matlabperformanceoptimization

解决方案


因此,您从一个 24 元素数组开始u,您希望以矢量化方式执行此操作。我假设您还有更多元素,但它们都适合内存。做到这一点的方法是u将元素重塑到您想要的位置。您可以通过以下方式执行此操作:

u1 = reshape(u1,[2,4,3]);

从那里你还需要修改s以匹配它

s1 = permute(s,[1 3 2]);

最后,您可以C以矢量化形式计算矩阵

C1 = mod(s1-sum(u1),1);

对于这个问题,这给出了一个1x4x3矩阵,其中第 3 维代表每组 8 个。然后您可以从那里提取您想要的问题集

C = squeeze(C1(1,:,1));

推荐阅读