【NumPy入門】重複を削除した配列を作るnp.uniqueをマスターしよう!

こんにちは、インストラクターのフクロウです。

np.arrayから重複を削除して、ユニークな要素だけの配列を返すnp.unique関数を紹介します。

listから重複を削除するには、set(集合)型を使えばOKでしたね。

これに対応する機能がnp.uniqueです。

この関数はsetにはない様々な便利な機能がついているので、使い方を覚えて効率的なコーディングを楽しみましょう!

目次

重複を削除したユニークな要素だけの配列を作る方法

代表的な重複を削除してユニークな要素だけの集合を作る方法にset関数があります。

これはリストから集合を作るSetクラスのコンストラクタです。

使い方は簡単。

In [1]:
sample = [1,2,3,3,4,4,4] # ターゲットのリスト

set(sample) # リストを引数にとってユニークな要素のみのセット型インスタンスを作る
Out[1]:
{1, 2, 3, 4}

これに対応するNumPyの関数で、np.uniqueがあります。

これはnp.arrayから重複を削除した配列を作る関数です。

np.uniqueの使い方

基本的な使い方

基本的にはset関数と同じ、重複を削除したい配列を関数に渡すだけです。

In [2]:
# ライブラリのimport
import numpy as np

# ターゲット配列の作成
sample2 = np.array(sample)

# uniqueで重複削除
unique_arr = np.unique(sample2)

# 中身を確認
unique_arr
Out[2]:
array([1, 2, 3, 4])
出力もちゃんとnp.arrayになっています。
listに対するset型のような、集合型に相当するクラスはNumPyには用意されていません

多次元配列からのユニーク配列の作り方

多次元配列でも、特に指定をしなければすべての要素からユニークな要素だけを取り出した配列が出力されます。

In [3]:
# ターゲット配列の作成
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
Out[3]:
array([0, 1, 2, 3])
多次元配列でも基本操作は同じですね。

ユニーク要素を数え上げる

配列のユニークな要素の数を数え上げたいときがあります。

1が何回出てきて… 2が何回出てきて… というような数え上げです。

こんなときにはreturn_counts=Trueを追記することで、一発で数え上げることができますよ!

In [4]:
# 重複削除
unique_arr = np.unique(sample2,            # ターゲット配列        
                       return_counts=True  # Trueだと集合と要素の数え上げをタプルで返す。(デフォルトはFalse)
                      )

# 確認
unique_arr
Out[4]:
(array([1, 2, 3, 4]), array([1, 1, 2, 3]))
出力がタプルになっていることに注意です!

初めてユニーク要素が出てきたインデックスの見つけ方

[1,2,3,3,4,4,4] という配列のユニークな要素は[1,2,3,4]ですが、これらが最初に出てきた位置が欲しい場合があります。

こんなときにもunique関数のパラメータを使うことで、簡単にインデックスを出力させることができます。

return_index=Trueを追記することで、最初にユニーク要素が出てきた場所を見つけることができます。

In [5]:
np.unique(sample2,          # ターゲット配列
          return_index=True #  Trueだと集合と最初の出現場所をタプルで返す。(デフォルトはFalse)
         )
Out[5]:
(array([1, 2, 3, 4]), array([0, 1, 2, 4]))

まとめ

この記事では、NumPy配列から重複を削除してユニークな要素だけの配列(集合)を作る機能、np.uniqueを紹介しました。

重複要素の数え上げなどの、よく使う操作もNumPyではカバーしているので、Set型のようなPython世界の機能を使わないでも操作を完了させることができそうです。

使い方がわからなくなったらこの記事を見たり、Pythonシェル上でhelp(np.unique)としてドキュメントを見たりしてください。

何度も調べているうちにきっと使いこなせるようになるはずです!

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次