内循环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)元素没有为我的循环使用?内循环Matlab循环
可以使用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
这使用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;
由于ismember已经提供了逻辑输出,我会推荐一个简单或语句:'swap_logical = ismember(D(:,1),d)| ismember(D(:,2),d)' – 2013-02-12 16:37:32
我同意这是更直接。 – 2013-02-13 17:15:08
所以,如果我理解正确:你想在D矩阵中的一行中的两个元素切换位置,当它们都出现在向量d? – 2012-03-01 10:29:36