оптимизация кода Matlab для цикла for - PullRequest
0 голосов
/ 05 января 2019

У меня есть код 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 голосов
/ 05 января 2019

Итак, вы начинаете с 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...