【问题标题】:== for multiple conditions at once [duplicate]==一次用于多个条件[重复]
【发布时间】:2022-01-21 13:25:13
【问题描述】:

假设我有一个 np.array:my_array = [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]

因此,要检查单个等于条件,我可以执行 my_array == 1 并获得一个布尔数组。

有没有办法扩展它来一次检查多个条件,比如my_array == [1,2](这不起作用)。我想避免使用 AND,因为我将添加许多这样的条件,这些条件会在循环中动态变化。

有没有更好的方法来解决这个问题,也许是 np.where?

澄清一下:我想在 my_array 中同时查找多个等于条件的所有元素。

【问题讨论】:

  • " my_array == [1,2] 之类的东西(不起作用)" 你想要的结果是什么?您尝试实施的实际规则是什么?显然,您的数组中的任何值都不能等于列表[1, 2],而且它们中的任何一个都不能同时等于 1 和等于 2。您是否想找到等于 [1, 2] 中的值?您是否想为每个测试单独测试并以某种方式累积结果?还有什么?
  • 对多个条件使用 AND 有什么问题?
  • 一个不错的例子在这里会很好
  • stackoverflow.com/questions/15939748/… 回答你的问题了吗?
  • 感谢 Karl 完美运行。我正在寻找 [1, 2] 中的任何值。

标签: python numpy


【解决方案1】:

我想这取决于您要返回的内容,但您可以尝试使用 np.where,例如:

array = np.array([1,2,3,4,5,6,7,8,9,10])
sifted = np.where(array % 2)

将返回一个 numpy 奇数数组。

Python 内置的 all() 也可能对您有用,具体取决于您对输出所做的操作。 all() 函数在给定条件下对列表的所有成员执行连接,即:

all(x % 2 for x in array)

在上述情况下,这将返回 false。

最后,这里要考虑的另一件有用的事情是 lambda 函数和列表推导式......从听起来你正在尝试做一些灵活和动态的事情,因此需要布尔值。您可以使用列表推导直接获取您想要的项目,但如果您正在做很多不同的事情,这可能会耗费大量人力:

new_array = [x for x in array if x % 2]

也许更好的选择是在需要时指定 lambda 函数:

lam = lambda x : x % 2
print(lam(array))

这将返回一个数组:

[1 0 1 0 1 0 1 0 1 0]

您可以将其与过滤器结合使用来过滤您的结果:

lam = lambda x : x % 2
filtered = list(filter(lam, array))

【讨论】:

  • 您正在检查元素模 2 是否不是 0,这不是问题所要求的。问题是检查元素是 1 还是 2。
  • 他们在询问如何在不使用 AND 的情况下检查列表的多个成员。他们给出了 1,2 作为一个简单的例子。
  • 是的,但我不明白使用模运算符如何解决问题。在您的情况下,您的结果数组对于奇数为真,对于偶数为假。这如何解决数字是 1 或 2 返回 true 否则返回 false 的问题?
  • 您专注于模运算符,但答案是建议跨 numpy 数组测试条件的不同方法。使用 lambda 和过滤器,all() 和 np.where()。条件本身是微不足道的。您误读了 OP 问题。
  • 看起来所有测试条件的方法仍然只是测试一个条件。该问题的目标是“将其扩展为一次检查多个条件”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多