NumPy マスク 2D 配列
マスクまたはブール配列とは何かについて、この説明で学習します。 また、Python で論理 P1ython 演算子と NumPy 論理関数を使用して 2D マスクを作成する方法も学びます。
Python で NumPy を使用してマスクまたは 2 次元ブール配列を作成する
何らかの条件を適用する配列から始めて、mask
またはブール配列を生成します。 たとえば、以下に示す整数の配列について考えてみましょう。次に、5 未満であるこの条件を適用します。
結果のブール配列は、入力配列と同じ形状になり、条件を要素ごとに適用しただけになります。 この場合、8 は 5 未満なので false、2 は 5 未満、つまり true、1 は 5 未満で true などとなります。
マスクを 0-1 で表す場合もあり、false は 0、1 は true を表します。
Python 論理演算子を使用したマスクの作成
numpy
をインポートしてコードにジャンプし、My_2DArray
という変数を作成します。この変数には、numpy
配列を使用して Python 2d リストが取り込まれます。
import numpy as np
My_2DArray = np.array([[-12, -31, 5], [7, 0, -9]])
print(My_2DArray)
出力:
[[-12 -31 5]
[ 7 0 -9]]
mask
を示す例を見てみましょう。 %
演算子を使用して My_2DArray
が 7 で割り切れる値を取る zero_mod_array
という新しい変数を作成しています。
7 で除算した後の剰余がゼロに等しい配列内のすべての要素を選択します。
コード:
import numpy as np
My_2DArray = np.array([[-12, -31, 5], [7, 0, -9]])
zero_mod_array = 0 == (My_2DArray % 7)
print(zero_mod_array)
実行後、ブール値の配列を作成したことがわかります。 -12 である配列の最初の要素を見ると、7 で割り切れず、次の要素も割り切れませんが、2 番目のリストの最初の要素は 7 であり、7 で割り切れます。2 番目の要素は 0 です。 も 7 で割り切れます。
したがって、すべての要素は 7 で割り切れないため、他の要素を除いて両方の要素が True
です。これが、それらの位置に False
値を取得した理由です。
出力:
[[False False False]
[ True True False]]
この次の例では、Sun_array
という変数を作成しています。これらは、ブール マスク配列の必須要素になります。 My_2DArray
を取得し、zero_mod_array
で作成した結果でインデックスを作成します。
コード:
import numpy as np
My_2DArray = np.array([[-12, -31, 5], [7, 0, -9]])
zero_mod_array = 0 == (My_2DArray % 7)
Sun_array = My_2DArray[zero_mod_array]
print(Sun_array)
出力:
[7 0]
Sun_array
をマスク配列として使用してそれ自体にインデックスを付け、Sun_array
内の 0 より大きい要素を選択し、正の要素のみを含む新しい配列を作成します。
Sun_array[Sun_array > 0]
Sun_array
では、1つの要素だけが 7 array([7])
より大きくなります。 Sun_array
を調べると、値が変更されていないことがわかります。 まだ array([7, 0])
です。
NumPy 論理関数でマスクを作成する
同じタスクを達成する別の方法を調べてみましょう。 特定の方法で、NumPy 論理演算子を使用します。
最初に、上記のように剰余演算子の結果を代入する mod_test
という変数を作成します。
同様のことを行い、positive_test
という別の変数を作成します。今回は、My_2DArray
がゼロより大きい値を割り当てます。つまり、My_2DArray
のすべての要素に条件を適用した後のブール値を示します。 .
combined_test
という別の変数を作成します。これは logical_and()
関数を使用し、引数として mod_test
と positive_test
を取ります。
コード:
import numpy as np
My_2DArray = np.array([[-12, -31, 5], [7, 0, -9]])
mod_test = 0 == (My_2DArray % 7)
positive_test = My_2DArray > 0
combined_test = np.logical_and(mod_test, positive_test)
print(combined_test)
実行後、完全なブール値が表示され、配列に対応する値が 1つだけ含まれています。
出力:
[[False False False]
[ True False False]]
combined_test
を使用して元の配列にインデックスを付け、上記で得たのと同じ値を取得できます。
コード:
import numpy as np
My_2DArray = np.array([[-12, -31, 5], [7, 0, -9]])
mod_test = 0 == (My_2DArray % 7)
positive_test = My_2DArray > 0
combined_test = np.logical_and(mod_test, positive_test)
print(My_2DArray[combined_test])
出力:
[7]
これは、同じ結果を得るために 2つの手法を使用して NumPy 2d 配列をマスクする方法です。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn