【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)としてドキュメントを見たりしてください。

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

フクロウ

フクロウ

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