具有多个条件的 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中文网其他相关文章!