首页  >  文章  >  后端开发  >  如何使用多个条件过滤 Numpy 数组:为什么 `np.where()` 失败以及如何获得正确的结果?

如何使用多个条件过滤 Numpy 数组:为什么 `np.where()` 失败以及如何获得正确的结果?

Barbara Streisand
Barbara Streisand原创
2024-10-26 10:27:02164浏览

 How to Filter Numpy Arrays with Multiple Conditions: Why `np.where()` Fails and How to Achieve Correct Results?

具有多个条件的 numpy where 函数

在 numpy 中,where 函数允许根据条件过滤数组。但是,当尝试使用 & 和 | 等逻辑运算符应用多个条件时,可能会出现意外结果。

请考虑以下代码:

import numpy as np

dists = np.arange(0, 100, 0.5)
r = 50
dr = 10

# Attempt to select distances within a range
result = dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]

此代码尝试选择 r 和 r 之间的距离r博士。但是,它只选择满足第二个条件的距离,dists <= r dr.

失败原因:

numpy where 函数返回以下元素的索引:满足条件,而不是布尔数组。使用逻辑运算符组合多个 where 语句时,输出是满足各自条件的索引列表。对这些列表执行 and 运算会产生第二组索引,从而有效地忽略第一个条件。

正确方法:

  • 元素-明智比较:

要应用多个条件,请直接使用逐元素比较:

dists[(dists >= r) & (dists <= r + dr)]
  • 布尔数组:

或者,为每个条件创建布尔数组并对它们执行逻辑运算:

condition1 = dists >= r
condition2 = dists <= r + dr
result = dists[condition1 & condition2]
  • 花式索引:

花哨的索引还允许条件过滤:

result = dists[(condition1) & (condition2)]

在某些情况下,将条件简化为单个标准可能会更有利,如下例所示:

result = dists[abs(dists - r - dr/2.) <= dr/2.]

通过了解了 where 函数的行为,程序员可以在 numpy 中根据多个条件有效地过滤数组。

以上是如何使用多个条件过滤 Numpy 数组:为什么 `np.where()` 失败以及如何获得正确的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn