首页  >  文章  >  后端开发  >  如何使用 NumPy 的 `np.where` 函数根据多个条件选择元素?

如何使用 NumPy 的 `np.where` 函数根据多个条件选择元素?

Patricia Arquette
Patricia Arquette原创
2024-10-26 08:50:03820浏览

How can I use NumPy's `np.where` function to select elements based on multiple conditions?

具有多个条件的 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) &amp; (dists <= r + dr)]

或者,如果特别需要结果以索引的形式,使用以下语法:

np.where((dists >= r) &amp; (dists <= r + dr))

为什么原始代码不起作用

原始问题中涉及的代码序列评估了两个独立地分离条件:首先,距离大于或等于r,然后距离小于或等于r dr。但是,因为 np.where 返回索引,所以使用 and 连接这两个条件的结果导致仅选择第二个条件中的索引。

创建一个按元素组合条件的布尔数组使用运算符。这可确保数组中的每个元素同时基于两个条件为 True 或 False。

替代方法

选择范围内距离的替代方法是使用条件索引,如下所示:

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

此选项通过创建一个布尔数组来检查每个距离是否在以 r 为中心的范围内,从而提供更简洁和可读的解决方案。

以上是如何使用 NumPy 的 `np.where` 函数根据多个条件选择元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

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