首頁  >  文章  >  後端開發  >  如何使用 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