过滤多个条件数组

时间:2017-01-23 04:16:52

标签: arrays matlab sorting

我试图用MATLAB过滤每个负数以及数组上的每个其他数字。这怎么可能?我以为我可以做到这一点,但它不起作用:

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

1 个答案:

答案 0 :(得分:1)

问题是2:2:end只返回以下数组

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

条件会产生一个logical数组,其大小为A true,其中元素为负数,false则为

您无法将这两者结合起来,因为它们有两种不同的类型和两种不同的尺寸。

如果您希望的所有数字为负数或出现在偶数位置,您可以在所有偶数位置创建true的逻辑数组(和{{ 1}}否则)然后使用它执行逻辑操作。为此,我们从false创建一个数组,并使用2执行模运算(mod)。偶数将具有余数[1....numel(A)],奇数将保留{ {1}}。因此,通过比较01mod(...,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);