こんにちは、インストラクターのフクロウです。
np.arrayから重複を削除して、ユニークな要素だけの配列を返すnp.unique関数を紹介します。
listから重複を削除するには、set(集合)型を使えばOKでしたね。
これに対応する機能がnp.uniqueです。
この関数はsetにはない様々な便利な機能がついているので、使い方を覚えて効率的なコーディングを楽しみましょう!
重複を削除したユニークな要素だけの配列を作る方法
代表的な重複を削除してユニークな要素だけの集合を作る方法にset関数があります。
これはリストから集合を作るSetクラスのコンストラクタです。
使い方は簡単。
sample = [1,2,3,3,4,4,4] # ターゲットのリスト
set(sample) # リストを引数にとってユニークな要素のみのセット型インスタンスを作る
これに対応するNumPyの関数で、np.uniqueがあります。
これはnp.arrayから重複を削除した配列を作る関数です。
np.uniqueの使い方
基本的な使い方
基本的にはset関数と同じ、重複を削除したい配列を関数に渡すだけです。
# ライブラリのimport
import numpy as np
# ターゲット配列の作成
sample2 = np.array(sample)
# uniqueで重複削除
unique_arr = np.unique(sample2)
# 中身を確認
unique_arr
多次元配列からのユニーク配列の作り方
多次元配列でも、特に指定をしなければすべての要素からユニークな要素だけを取り出した配列が出力されます。
# ターゲット配列の作成
sample3 = np.array(
[
[0,1,1,1,2],
[1,2,2,1,0],
[0,0,0,0,3],
]
)
# 重複削除
unique_arr = np.unique(sample3)
# 確認
unique_arr
ユニーク要素を数え上げる
配列のユニークな要素の数を数え上げたいときがあります。
1が何回出てきて… 2が何回出てきて… というような数え上げです。
こんなときにはreturn_counts=Trueを追記することで、一発で数え上げることができますよ!
# 重複削除
unique_arr = np.unique(sample2, # ターゲット配列
return_counts=True # Trueだと集合と要素の数え上げをタプルで返す。(デフォルトはFalse)
)
# 確認
unique_arr
初めてユニーク要素が出てきたインデックスの見つけ方
[1,2,3,3,4,4,4] という配列のユニークな要素は[1,2,3,4]ですが、これらが最初に出てきた位置が欲しい場合があります。
こんなときにもunique関数のパラメータを使うことで、簡単にインデックスを出力させることができます。
return_index=Trueを追記することで、最初にユニーク要素が出てきた場所を見つけることができます。
np.unique(sample2, # ターゲット配列
return_index=True # Trueだと集合と最初の出現場所をタプルで返す。(デフォルトはFalse)
)
まとめ
この記事では、NumPy配列から重複を削除してユニークな要素だけの配列(集合)を作る機能、np.uniqueを紹介しました。
重複要素の数え上げなどの、よく使う操作もNumPyではカバーしているので、Set型のようなPython世界の機能を使わないでも操作を完了させることができそうです。
使い方がわからなくなったらこの記事を見たり、Pythonシェル上でhelp(np.unique)としてドキュメントを見たりしてください。
何度も調べているうちにきっと使いこなせるようになるはずです!