我有一个像这样的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
值时。我该如何编码,以便花费更少的时间。
答案 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));