我有两个不同维度的矩阵,我想比较它们第一列中的任何元素是否匹配(并最终删除匹配的行(。循环只需要太多时间,所以我正在尝试矢量化版本,但我尝试过的都不起作用。任何帮助都将不胜感激!
示例。
A = magic(3);
B = magic(6);
UpTo = min( size( A, 1 ), size( B, 1 ) );
CommonRows = B(1 : UpTo, 1) == A(1 : UpTo, 1);
B( CommonRows, : ) = [] % B with rows of same element in column 1 removed
这是我最后一次尝试,几乎成功了,但当我在两个矩阵中都有重复值时,它就不起作用了。
[C,iC]=setdiff(A(:,1),B(:,1))
[D,iD]=intersect(A(:,1),B(:,1))
newA=A(iC,:)
newBtemp=[A(iD,:);B]
newB=sort(newBtemp)
但我想我现在终于明白了:
common=ismember(A(:,1),B(:,1))
temp=A(common,:)
A(common,:)=[]
newB=sort([temp;B])