条件を指定しての配列からの要素の抽出は、zipを利用してもできますが、NumPyのwhereを利用すると簡単に記述することができます。この記事では、zip、whereの使い方とその違いを確認していきましょう。
NumPyでのzipによる条件指定での抽出
同じ要素数のndarray型の配列A、B、conditionを用意します。配列A、Bについては適当な数値を格納し、配列conditionにはTrue、もしくは、Falseを格納します。配列A、B、conditionの要素を順に読み込み、conditionの値がTrueの場合はAから値を取得し、conditionの値がFalseの場合はBから値を取得するプログラムを記述します。
...:
B=np.array([100,200,300,400])...:
condition=np.array([True,True,False,False])...:
answer=[(A_val if cond else B_val) for A_val,B_val,cond in zip(A,B,condition)] ...:
answer
zipでは複数の配列などのオブジェクトの要素を取り出すことができ、'for A_val,B_val,cond in zip(A,B,condition)'では、'zip(A,B,condition)'で配列A、B、conditionの要素を順に取り出し、それぞれ変数A_val、B_val、condに格納していきます。これらの変数は'A_val if cond else B_val'のif文でcondがTrueであれば変数A_valの値、condがFalseであれば変数B_valの値を出力用の配列の要素としています。
発売数10,000本突破記念で、期間限定で88%オフの大セール中!!!
NumPyでのwhereによる条件指定での抽出
上記の複雑なプログラムは、NumPyのwhereを使うと簡単に記述することができます。whereではNumPyのndarray配列に対して、条件を満たす要素を簡単に抽出することができます。
記述方法は以下で、
条件式を満たす場合(真Trueの場合)はx、満たさない場合(偽Falseの場合)はyのndarray配列を返します。またx, yを省略した場合は、条件を満たすindexを返します。
このwhereを利用して、先ほどのプログラムは以下のように書き換えることができます。
...:
answer2
著書の紹介です。