【问题标题】:Filter Multiple Conditions Array过滤多个条件数组
【发布时间】:2017-01-23 04:16:51
【问题描述】:

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

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

【问题讨论】:

  • 请解释你的问题

标签: arrays matlab sorting


【解决方案1】:

问题是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的文档在哪里
  • @carlosremove 我添加了更多描述
猜你喜欢
  • 2021-10-20
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多