具有多个条件的 Numpy where 函数
处理数组时,NumPy 中的 np.where 函数可以是一个有用的工具,用于选择特定的基于一定条件的元素。但是,当尝试同时应用多个条件时,可能会出现混乱。
考虑问题中呈现的场景:目标是从名为 dists 的数组中选择指定范围内的距离。尝试了以下代码:
dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
但是,此代码仅选择小于或等于 r dr 的距离,而不是同时选择这两个条件。要理解为什么会发生这种情况,必须注意 np.where 返回索引列表,而不是布尔数组。
更正代码
正确的方法使用 np.where 应用多个条件是使用逐元素运算符(& 表示 AND,| 表示 OR)创建组合布尔数组,如下所示:
dists[(dists >= r) & (dists <= r + dr)]
或者,如果特别需要结果以索引的形式,使用以下语法:
np.where((dists >= r) & (dists <= r + dr))
为什么原始代码不起作用
原始问题中涉及的代码序列评估了两个独立地分离条件:首先,距离大于或等于r,然后距离小于或等于r dr。但是,因为 np.where 返回索引,所以使用 and 连接这两个条件的结果导致仅选择第二个条件中的索引。
创建一个按元素组合条件的布尔数组使用运算符。这可确保数组中的每个元素同时基于两个条件为 True 或 False。
替代方法
选择范围内距离的替代方法是使用条件索引,如下所示:
dists[abs(dists - (r + dr / 2.)) <= dr / 2.]
此选项通过创建一个布尔数组来检查每个距离是否在以 r 为中心的范围内,从而提供更简洁和可读的解决方案。
以上是如何使用 NumPy 的 `np.where` 函数根据多个条件选择元素?的详细内容。更多信息请关注PHP中文网其他相关文章!