【发布时间】:2017-01-23 04:16:51
【问题描述】:
我正在尝试使用 MATLAB 过滤数组上的每个负数以及每个其他数字。这怎么可能?我以为我可以做到这一点,但它不起作用:
Z = A(A<0 | 2:2:end)
【问题讨论】:
-
请解释你的问题
我正在尝试使用 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) 与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);
【讨论】:
mod(1:numel(A), 2) == 0的文档在哪里