2017-01-23 123 views
0

我想用MATLAB過濾每個負數以及數組上的每個其他數字。這可能怎麼樣?我想我可以做到這一點,但它不工作:過濾多個條件陣列

Z = A(A<0 | 2:2:end) 
+0

解釋你的問題,請 – eyllanesc

回答

1

的問題是,2:2:end只是返回如下數組

[2, 4, 6, .... % All the way up to numel(A) 

有條件的產量A一個logical數組的大小是true其中一個元素爲負值,否則爲false

你不能合併這兩個,因爲它們是兩種不同的類型和兩種不同的尺寸。

如果您想獲得要麼負數或出現在偶數位置的所有號碼,你可以創建一個邏輯陣列是true在所有偶數位置(和false其他方式),然後執行使用邏輯運算代替。爲此,我們從[1....numel(A)]創建一個數組,並使用2執行模運算(mod)。偶數的餘數爲0,奇數的餘數爲1。因此,通過將mod(...,2)0== 0)的結果進行比較,我們會得到一個在所有偶數位置都爲true的邏輯陣列,否則爲false

even_locations = mod(1:numel(A), 2) == 0; 
Z = A(A < 0 | even_locations); 

如果您只是想是偶數位置

tmp = A(2:2:end); 
Z = tmp(tmp < 0); 

或者你可以使用even_locations陣列之上:

Z = A(A < 0 & even_locations); 
+0

它的工作原理。你能解釋我或給我在哪裏是mod的文檔(1:numel(A),2)== 0' – carlosremove

+0

@carlosremove我添加了更多的描述 – Suever