我有两个大型数组,我将使用以下示例进行说明。
第一个数组A是:
[ 1 21;
3 4;
4 12;
5 65 ];
第二个数组B是:
[ 1 26;
31 56;
4 121;
5 54 ];
我想获得最终的数组C如下:
[ 1 21 26;
4 12 121;
5 65 54];
即。使用A和B中第一列的公共元素来筛选出我想从数组A和B中提取的行并生成C.
答案 0 :(得分:2)
使用ismember
的双输出版本:
[ii jj] = ismember(A(:,1), B(:,1));
C = [ A(ii,:) B(jj(ii),2) ];
请注意,在第二行ii
是逻辑index,而jj(ii)
是标准(整数)索引。
答案 1 :(得分:2)
bsxfun
方法 -
%// Slightly bigger and not-so-straightforward example to avoid any confusion
A =[ 1 21;
3 4;
4 12;
8 10
5 65]
B = [ 1 26;
31 56;
4 121;
5 54
9 99
8 88]
binmat = bsxfun(@eq,A(:,1),B(:,1).');%//'
[v1,v2] = max(binmat,[],2);
C = [A(any(binmat,2),:) B(nonzeros(v1.*v2),2:end)]
输出 -
A =
1 21
3 4
4 12
8 10
5 65
B =
1 26
31 56
4 121
5 54
9 99
8 88
C =
1 21 26
4 12 121
8 10 88
5 65 54