次回より『ヒデログ』とご検索ください

【Python入門】Numpyのブールインデックス参照の使い方

ひでひろ
ブールインデックスの使い方を解説します。
ブールインデックス参照は、真偽値の配列によってTrueになっている要素を値渡しするものです。

ブールインデックス参照の使い方

複数のパターンでブールインデックス参照の使い方を解説します。

ブールインデックス参照:文字配列

ndarrayオブジェクトの文字列配列でブールインデックス参照の例を示します。

import numpy as np

fruits = np.array(['apple','banana','cherry','apple','banana'])
print(fruits=='apple')

city = np.array(['tokyo','kanagawa','saitama','chiba','osaka'])
print(city[fruits=='apple'])
print(city[(fruits=='apple')|(fruits=='banana')])
実行結果
[ True False False True False]

['tokyo' 'chiba']
['tokyo' 'kanagawa' 'chiba' 'osaka']

コード解説

fruits=='apple'で配列の中でappleになっている要素をTrueで返しています。それ以外の要素をFalseで返しています。

city[fruits=='apple']Trueとなった要素だけを取り出し、新たな配列を生成しています。

city[(fruits=='apple')|(fruits=='banana')]では、(fruits=='apple')|(fruits=='banana')がTrueとなる要素(fruits配列の中で要素がappleとbanana)が新に配列として生成されます。

ブールインデックス参照:数字配列

ndarrayの数字列配列でブールインデックス参照の例を示します。

import numpy as np
arr1=np.arange(5)
print(arr1)
# [0,1,2,3,4]

arr2=np.arange(10,15)
print(arr2)
# [10,11,12,13,14]

print(arr1==3)

print(arr2[arr1==3])

print(arr1<2)
print(arr2[arr1<2])

print((arr1==0)|(arr1==3))
print(arr2[(arr1==0)|(arr1==3)])
実行結果
[0 1 2 3 4]
[10 11 12 13 14]

[False False False  True False]
[13]

[ True  True False False False]
[10 11]

[ True False False  True False]
[10 13]

コード解説

arr2[arr1==3]arr1==3Trueとなる配列の添え字に対応するarr2の要素を取り出して配列を生成する。

arr2[arr1<2]及びarr2[(arr1==0)|(arr1==3)]も同様です。

ブールインデックス参照:多次元配列

ndarrayの多次元配列でブールインデックス参照の例を示します。

import numpy as np

# 5x3の行列(多次元配列)
mtx=np.arange(15).reshape(5,3)
arr=np.arange(5)

print(mtx)

print(arr==3)
print(mtx[arr==3])
print(mtx[arr<2])
実行結果
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]

# arr==3
[False False False True False]

# mtx[arr==3]
# 1x3の行列(多次元配列)
[[ 9 10 11]]

# mtx[arr<2]
[[0 1 2]
 [3 4 5]]

コード解説

np.arange(15).reshape(5,3)はndarrayオブジェクトで作成した5x3の行列(多次元配列)。

arrを5x1の多次元配列と見て、arr==3となる「列」がTrueとなるmtxの「列」を抽出して多次元配列となる。

まとめ

ひでひろ
ブールインデックス参照について解説しました。

文字列でも数値配列でも多次元配列でも使用できますし、演算子だけでなく論理演算子も使用できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です