2017-01-23 81 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