NumPy中級⑤:便利関数大全|np.where, np.any, np.all, np.select を使いこなす

はじめに

NumPyには、配列の操作や条件分岐、ブール評価などを簡潔に記述できる便利関数が多数用意されています。中でも np.wherenp.anynp.allnp.select は、データの前処理や集計、可視化において頻出の関数です。

この記事では、それぞれの関数の基本的な使い方から、実務でよく使われる応用パターンまでを豊富なサンプルとともに紹介します。


np.where:条件に応じた値の切り替え

基本構文

np.where(条件, 条件がTrueのときの値, 条件がFalseのときの値)

例1:配列の値を条件付きで変換

import numpy as np
arr = np.array([10, 20, 30, 40, 50])
new_arr = np.where(arr > 30, 1, 0)
print(new_arr)  # [0 0 0 1 1]

例2:文字列ラベルをつける

labels = np.where(arr > 30, "High", "Low")
print(labels)  # ['Low' 'Low' 'Low' 'High' 'High']

np.any / np.all:論理評価に使える関数

np.any:1つでもTrueならTrue

bools = np.array([False, False, True])
print(np.any(bools))  # True

np.all:すべてTrueならTrue

bools = np.array([True, True, True])
print(np.all(bools))  # True

2次元配列のaxis指定

mat = np.array([[True, False], [True, True]])
print(np.any(mat, axis=0))  # → [True True]
print(np.all(mat, axis=1))  # → [False True]

np.select:複数条件で柔軟に値を割り当て

基本構文

np.select([条件1, 条件2, ...], [値1, 値2, ...], default=その他の値)

例:成績評価のランク分け

scores = np.array([35, 55, 75, 90])
conditions = [scores < 50, scores < 70, scores < 85]
choices = ["D", "C", "B"]
labels = np.select(conditions, choices, default="A")
print(labels)  # ['D' 'C' 'B' 'A']

複雑な if-elif-else を書かなくても、簡潔に条件分岐できます。


実用パターンのまとめ

条件付きフィルタ → where

  • ラベル化
  • マスキング
  • フィルタ処理の前段階

ブール評価 → any / all

  • 欠損や異常値のチェック
  • 条件に合う行・列の抽出

多段階の条件 → select

  • スコア分類
  • 価格帯ラベル付け
  • 教師データのグループ化

よくあるミスと対策

  • select における conditionschoices の数が合っていない → エラーになります
  • any/allaxis を指定しないと全体評価になる → 意図と違う結果に注意
  • where の2項目目・3項目目のブロードキャストに失敗 → 配列の形を確認しましょう

おわりに

np.where, np.any, np.all, np.select は、使い慣れると複雑な条件処理を短く・読みやすく・高速に記述できる強力な関数群です。

これらの関数を使いこなすことで、データの前処理や特徴量生成の質が格段に向上します。次回はNumPy中級シリーズのまとめ回として、配列操作・演算・条件処理の総復習と演習問題をご紹介します。

✅ NumPy中級シリーズ:目次リンク

🔹 NumPy中級シリーズ一覧(基礎〜応用)

  1. 【中級①】配列操作の基本と応用|reshape・axis・スライスをマスター
     ↳ NumPy中級①:配列操作の基本と応用|reshape・axis・スライスをマスター
  2. 【中級②】ブロードキャストと演算の仕組みを徹底解説
     ↳ NumPy中級②:ブロードキャストと演算の仕組みを徹底解説
  3. 【中級③】条件抽出と論理演算|配列を自在にフィルタリングする
     ↳ NumPy中級③:条件抽出と論理演算|配列を自在にフィルタリングする
  4. 【中級④】乱数生成とシミュレーション|再現性と統計処理の基礎
     ↳ NumPy中級④:乱数生成とシミュレーション|再現性と統計処理の基本
  5. 【中級⑤】応用編:np.where, np.select, np.any, np.allの便利な使い方
     ↳ NumPy中級⑤:便利関数大全|np.where, np.any, np.all, np.select を使いこなす

コメント

タイトルとURLをコピーしました