我有一个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?
答案 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;