2014-05-19 88 views
1

我有兩個大數組,我將用下面的例子來說明。從兩個陣列生成matlab數組

第一陣列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

使用ismember兩輸出vesion:

[ii jj] = ismember(A(:,1), B(:,1)); 
C = [ A(ii,:) B(jj(ii),2) ]; 

注意,在第二行ii是邏輯index,而jj(ii)是一個標準(整數)的索引。

+3

Congratz路易斯!你的第1000個答案! –

+2

宇路易!恭喜! – Divakar

+0

哦,真的嗎?哇!多謝你們!! –

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 
+0

如果例如最後兩行'B'互換,我們的方法會給出不同的結果。 OP應該澄清。但從措辭來看,順序並不重要? –

+0

...或者你在'bsxfun'裏面缺少'.''? –

+0

是的,可能就是這樣!謝謝!我的系統運行緩慢,我有30個標籤打開!現在我需要做更多的處理。 – Divakar