我试图用MATLAB过滤每个负数以及数组上的每个其他数字。这怎么可能?我以为我可以做到这一点,但它不起作用:
Z = A(A<0 | 2:2:end)
答案 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}}。因此,通过比较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);