NumPy マスク 2D 配列

Salman Mehmood 2024年2月15日
  1. Python で NumPy を使用してマスクまたは 2 次元ブール配列を作成する
  2. Python 論理演算子を使用したマスクの作成
  3. NumPy 論理関数でマスクを作成する
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_testpositive_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 配列をマスクする方法です。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

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