2012-03-01 136 views
0

我有一个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)元素没有为我的循环使用?内循环Matlab循环

+0

所以,如果我理解正确:你想在D矩阵中的一行中的两个元素切换位置,当它们都出现在向量d? – 2012-03-01 10:29:36

回答

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 
0

这使用matlab的vectorizion完成任何循环都相对容易。

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

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

%矢量化交换基于所述交换boolian。

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

由于ismember已经提供了逻辑输出,我会推荐一个简单或语句:'swap_logical = ismember(D(:,1),d)| ismember(D(:,2),d)' – 2013-02-12 16:37:32

+0

我同意这是更直接。 – 2013-02-13 17:15:08