NumPy の where 関数の複数の条件
NumPy では、where() 関数が条件付き選択によく使用されます。複数の条件を扱う場合、目的の結果を達成するためにそれらを効果的に組み合わせる方法を理解することが重要です。
指定された範囲内の距離を選択する例を考えてみましょう。次のコードはこれを実行しようとします:
<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
ただし、2 番目の条件 (np.where(dists <= r dr)) 内の距離のみが選択されるという予期しない結果が生じます。
コードの修正
問題を解決するには、np.where() がブール配列ではなく、条件を満たす要素のインデックスを返すことを理解する必要があります。したがって、複数の np.where() 呼び出しの結果を結合しても、ブール配列は生成されません。
代わりに、要素ごとのブール演算子を使用して、目的の条件付き選択を実行できます。これを実装するための 2 つの正しい方法を次に示します。
オプション 1: 条件を結合する
<code class="python">dists[(dists >= r) & (dists <= r + dr)]
& 演算子は要素ごとの AND を実行し、結果としてブール配列が生成されます。これを使用して元の配列 dists にインデックスを付けることができます。
オプション 2: 中間変数を使用する
<code class="python">mask1 = dists >= r mask2 = dists <= r + dr dists[(mask1) & (mask2)]
条件ごとに一時変数を作成することで、次のことを確認できます。両方の条件を入力し、& 演算子を使用してそれらを結合し、ブール配列を作成します。
元のコードが機能しなかった理由
元のコードは、np が原因で機能しませんでした。 .where() はブール配列ではなく、インデックスのリストを返します。 2 つのインデックスのリストを結合しても、望ましい結果は得られません。
例:
<code class="python">dists = np.arange(0, 10, 0.5) r = 5 dr = 1 mask1 = np.where(dists >= r) mask2 = np.where(dists <= r + dr) print(mask1 and mask2) # Outputs: (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),)</code>
ご覧のとおり、結果の配列は、どの要素が両方の条件を満たすかを示すブール配列ではありません。
以上がNumPy の where 関数で複数の条件を効果的に組み合わせる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。