从两个数组生成matlab数组

时间:2014-05-19 16:58:55

标签: arrays matlab matching

我有两个大型数组,我将使用以下示例进行说明。

第一个数组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.

2 个答案:

答案 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