2013-06-20 31 views
0

假設我們有一個100 * 4的數組。消除matlab中的部分數組

我們還有一個100 * 1的1和0的數組。假設有n 1個。

我們要創建一個從100×4陣列,在這裏我們只包括其中第二陣列是做1

一種方式列的N * 4陣列是通過雙重for循環。有一個更簡單的方法嗎?

所以,我們有

A = [ [ 332 44 33 22 33 55 33 211 ..... 
     [ 823 44 12 98 19 23 32 911 ..... 
     .... 
     .... 
    ] 

B = [1 0 0 1 0 0 0 ....] 

,我們希望

C = [ [ 332 22 ... 
     [ 823 98 ... 
     .... 
     .... 
    ] 
+0

看一看[這個提問/回答(http://stackoverflow.com/questions/11419220/matlab-extract-submatrix-with-logical-indexing) ,我認爲你正在尋找一種邏輯索引的形式。 – Schorsch

回答

4

你應該使用logical indexing

C = A(:, B==1); 
+1

簡明扼要,正確並帶有參考,以防您不理解語法+1。 – Floris

+0

不錯,非常簡潔,效果很好。 –

1

首先你repmat邏輯載體,使其具有精確的尺寸爲基體相同A

idx2keep = repmat(b, [1 4]); % Or [4 1] depending on if it's a col or row vector 

然後,你可以簡單地用

B = A(idx2keep) 

指數它們你就可以把它做成列向量:

B = B(:) 

這應該做的工作。下次,請始終發佈一些代碼或符號,以便回答這個問題更簡單更清晰。

+0

謝謝,我已添加更多信息 –

+0

'repmat'?你沒有聽說過'bsxfun'嗎? – Shai

+0

在這種情況下bsxfun會被如何使用? 此外,此解決方案確實返回1x(4n)數組而不是4xn數組。 –