Numpy の Where 関数で複数の条件を使用して配列要素にアクセスする
NumPy で配列を操作する場合、多くの場合、要素に基づいて選択的にアクセスする必要があります。特定の条件で。 where() 関数は、このシナリオで重要な役割を果たし、指定された基準を満たす要素を柔軟に選択できるようにします。
ただし、where() の望ましい動作が期待から逸脱するインスタンスが発生し、エラーが発生します。または予想外の結果。 NumPy で効果的に配列を操作するには、この関数のニュアンスを理解することが不可欠です。
次のコード スニペットを考えてみましょう:
<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
このコードは、指定された範囲 [r, r] 内の距離を選択することを目的としています。博士]。ただし、2 番目の条件 dists <= r dr を満たす要素のみがキャプチャされます。これを修正するには、両方の条件を 1 つの条件に変換するか、高度なインデックスを利用します。
<code class="python">dists[abs(dists - r - dr/2.) <= dr/2.]
<code class="python">dists[(dists >= r) & (dists <= r+dr)]
元のコードの問題は、where() の誤った使用法に起因します。ブール配列とは異なり、where() はインデックスのリストを返します。および を介して 2 つのインデックスのリストを結合すると、2 番目のリストが生成され、最初の条件が効果的にオーバーライドされます。
さらに明確にするために、次の点を考慮してください。
<code class="python">a = np.where(dists >= r) b = np.where(dists <= r + dr)
a と b の結果は b になります。 。正しいブール配列を取得するには、要素ごとの & 演算子を使用して条件を組み合わせる必要があります:
<code class="python">dists >= r & dists <= r + dr
ブール配列が使用可能になったら、それを配列の選択に利用できます:
<code class="python">dists[dists >= r & dists <= r + dr]</code>
以上が複数条件の配列要素にアクセスするために Numpy の `where` 関数を正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。