ホームページ >バックエンド開発 >Python チュートリアル >NumPy の「np.where」関数を使用して複数の条件に基づいて要素を選択するにはどうすればよいですか?
複数の条件を持つ Numpy where 関数
配列を扱う場合、NumPy の np.where 関数は、特定の条件を選択するための便利なツールです。特定の条件に基づいた要素。ただし、複数の条件を同時に適用しようとすると、混乱が生じる可能性があります。
質問で示されたシナリオを考えてみましょう。目的は、dist と呼ばれる配列から指定された範囲内の距離を選択することです。次のコードが試行されました:
dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
ただし、このコードは両方の条件ではなく、r dr 以下の距離のみを選択します。この問題が発生する理由を理解するには、np.where がブール配列ではなくインデックスのリストを返すことに注意することが重要です。
コードの修正
正しい方法np で複数の条件を適用します。以下に示すように、要素ごとの演算子 (AND の場合は &、OR の場合は |) を使用して結合されたブール配列を作成します。
dists[(dists >= r) & (dists <= r + dr)]
または、結果が特に必要な場合インデックスの形式で、次の構文を使用します:
np.where((dists >= r) & (dists <= r + dr))
元のコードが機能しなかった理由
元の質問に含まれるコード シーケンスは 2 つ評価されました条件を個別に分離します。まず、r 以上の距離、次に r dr 以下の距離です。ただし、np.where はインデックスを返すため、 と を使用してこれら 2 つの条件の結果を連結すると、2 番目の条件からインデックスのみが選択されます。
条件を要素ごとに結合するブール配列を作成するには演算子が使用されます。これにより、両方の条件に同時に基づいて、配列内の各要素が True または False になることが保証されます。
代替アプローチ
範囲内の距離を選択する代替方法は、次のとおりです。以下に示すように、条件付きインデックスを使用します。
dists[abs(dists - (r + dr / 2.)) <= dr / 2.]
このオプションは、各距離が r を中心とする範囲内にあるかどうかをチェックするブール配列を作成することにより、より簡潔で読みやすいソリューションを提供します。
以上がNumPy の「np.where」関数を使用して複数の条件に基づいて要素を選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。