【问题标题】:optimizing a matlab code involving for loop优化涉及 for 循环的 matlab 代码
【发布时间】:2019-05-31 22:48:44
【问题描述】:

我有一个像这样的 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 的其他两个值实现此代码,也使用u 的下一个8 值,即现在我的代码变为

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

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

【问题讨论】:

    标签: matlab performance optimization


    【解决方案1】:

    因此,您从 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));
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2019-09-20
      • 2014-10-09
      • 2021-01-27
      • 2020-10-19
      相关资源
      最近更新 更多