Matlab循环内循环

时间:2012-03-01 10:00:08

标签: matlab

我有一个Nx2矩阵说D(k1,k2)。我必须比较每一行的k1和k2并相应地切换。存在另一个具有M值的向量d(i)。     如果k1和k2是d(i)的任何一个值,我必须切换。 如果D(k1,1)== d(i)&& D(k1,2)== d(i).... 是否有任何方法可以比较if循环中的所有d(i)元素而不使用for循环for i?

2 个答案:

答案 0 :(得分:1)

您可以使用ismember function检查向量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

答案 1 :(得分:0)

使用matlab的vectorizion完全没有任何循环,这是相对容易实现的。

%交换逻辑向量(如果需要交换该行,则为1,否则为0)

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

%基于交换boolian的矢量化交换。

Dnew = swap_logical.*D(:,2:-1:1) + ~swap_logical.*D;