Цикл Matlab внутри цикла - PullRequest
       1

Цикл Matlab внутри цикла

0 голосов
/ 01 марта 2012

У меня есть матрица Nx2, скажем, D (k1, k2). Мне нужно сравнить k1 ​​и k2 из каждой строки и соответственно переключаться.Есть еще один вектор d (i), который имеет М значений.если k1 и k2 любое значение d (i), я должен переключиться.if D (k1,1) == d (i) && D (k1,2) == d (i) .... Есть ли метод для сравнения всех элементов d (i) в цикле if без использования forцикл для I?

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Вы можете использовать функцию ismember для проверки, содержит ли вектор d определенные значения:

D_in_d = ismember(D,d);

и затем вам все еще нужно выполнить цикл, чтобы выполнить операцию переворачивания определенных строк:

for i=1:size(D,1)
    if all(D_in_d(i,:))
        D(i,:)=fliplr(D(i,:));
    end
end
0 голосов
/ 12 февраля 2013

Это относительно легко сделать с векторизацией matlab без каких-либо петель.

% Логический вектор обмена (1, если вам нужно поменять местами эту строку, 0 в противном случае)

swap_logical = ( ismember(D(:,1),d) | ismember(D(:,2),d) );

% Векторизованный обмен на основе булианского свопа.

Dnew = swap_logical.*D(:,2:-1:1) + ~swap_logical.*D;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...