Memento memo.

Today I Learned.

NumPyの配列操作 - 条件に合う要素のみフィルタする処理の理解

積ん読消化中で、以前買った機械学習入門本を読んでいます。

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

前半部に基礎的な事項が簡潔にまとめられてて良い本です。 おかげで去年Courseraでやった内容を思い出せました。

本題

NumPy使っていて、以下の例での3行目あたりの処理で一体何が起きているのか分かってなかったのでメモ。

a = np.arange(10)
#=> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[a<5]
#=> array([0, 1, 2, 3, 4]) <- !?!?

配列の indexing

配列のindexingは、配列に対してbool値でindexを指定すると True の要素だけ取り出せるやつです(本当はもうちょっと意味が広いです)。

a[np.array([True, False, True, False, True, False, True, False, True, False])]
#=> array([0, 2, 4, 6, 8])

配列の broadcasting

broadcastingは、配列の全ての要素に関数を適用するやつです。

a < 5
#=> array([ True,  True,  True,  True,  True, False, False, False, False, False], dtype=bool)

まとめ

a = np.arange(10)
#=> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[a<5]
#=> array([0, 1, 2, 3, 4])
# 以下の2STEPに分解できる
bool_array = a < 5
#=> array([ True,  True,  True,  True,  True, False, False, False, False, False], dtype=bool)
a[bool_array]
#=> array([0, 1, 2, 3, 4])

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)

データサイエンティスト養成読本 機械学習入門編 (Software Design plus)