优化涉及for循环的matlab代码

时间:2019-01-05 17:51:05

标签: matlab performance optimization

我有一个像这样的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的最后一个值类似。但是每次我需要8的下一个u值时。我该如何编码,以便花费更少的时间。

1 个答案:

答案 0 :(得分:2)

因此,您从u中的24个元素数组开始,希望以矢量化的方式执行此操作。我假设您还有更多元素,但它们都适合存储在内存中。完成此操作的方法是将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));