我正在尝试使用MATLAB过滤数组中的每个负数以及其他所有数。这怎么可能?我以为可以做到这一点,但是没有用:
Z = A(A<0 | 2:2:end)
问题是,2:2:end
仅返回以下数组
[2, 4, 6, .... % All the way up to numel(A)
条件产生一个logical
数组,该数组的大小A
是true
元素为负数的数组,false
否则为负数。
您无法将这两种方式结合使用,因为它们是两种不同的类型且具有两种不同的大小。
如果您想获得所有数字无论是负数或出现在偶数位置,你可以创建一个逻辑数组,它是true
在所有偶数位置(及false
其他),然后进行使用,而不是逻辑运算。为此,我们从中创建一个数组,[1....numel(A)]
并对2进行模运算(mod
)。偶数将具有余数,0
奇数将具有的余数1
。因此,通过比较mod(...,2)
to 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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句