レッスン1 / 1問目

『集合関数』

このレッスンではNumPyの集合関数について見ていきましょう。

まずはどのような集合関数があるのかを見ていきます。ここで学習するNumPyの集合関数は以下の通りです。(一つずつ解説していきますのでここで暗記する必要はありません。)

関数説明
np.union1d(x, y)和集合
np.intersect1d(x, y)積集合
np.setdiff1d(x, y)差集合
setxor1d(x, y)排他的論理和
np.in1d(x, y)配列xに指定要素yが含まれている場合にTrueを返す
np.unique(x, y)重複要素を取り除き、ソートした結果を返す

これらの集合関数について以下の内容を見ていきます。

  1. 集合関数とは
  2. np.union1d()
  3. np.intersect1d()
  4. np.setdiff1d()
  5. setxor1d()
  6. np.in1d()
  7. np.unique()

ではこれらについて順番に見ていきましょう。まずは集合関数についてです。

集合関数とは

まず、集合とは要素の集まりのことです。つまり配列やリストのような複数の要素が集まっている構造体を集合と呼びます。

そして集合関数とは複数の集合に対して使うことができる関数です。どのような内容のものがあるのか例をいくつか見ていきましょう。

和集合

まずは和集合です。和集合とは2つの集合に含まれる全ての要素を取り出した集合です(重複要素は取り除く)。例えば以下のような二つの配列があったとします。

[1 2 3 4] [3 4 5 6]

この二つの配列の和集合は以下の通りとなります。

[1 2 3 4 5 6]    # 和集合

このように集合におけるすべての要素の重複を取り除いたものが和集合となります。

積集合

では続いて積集合について見ていきましょう。以下の二つの配列があったとします。

[1 2 3 4] [3 4 5 6]

これらの配列における積集合は以下の通りです。

[3 4]    # 積集合

このように配列どうしの共通要素が積集合となります。

これらのように2つの配列に対して処理を行い、和集合や積集合のような集合体を返す関数を集合関数と呼びます。ここでは和集合と積集合を例に出しましたが、その他の集合関数については以降で解説します。

np.union1d()

ではここからはNumPyで使用することができる集合関数について見ていきましょう。

まずはnp.union1d()です。np.union1d()は上記で見た和集合を返す関数です。以下のように引数に二つの配列を指定すると和集合の配列を返します。

  1. arr1 = np.array([1, 2, 3, 4, 5])
  2. arr2 = np.array([4, 5, 6, 7, 8])
  3. arr3 = np.union1d(arr1, arr2)
  4. print(arr3)
[1 2 3 4 5 6 7 8]    # 和集合

np.union1d()によりarr1とarr2の重複を取り除いた全ての要素(和集合)が出力されました。

ちなみに「union」は「結合」という意味です。「1d」は「1 dimension(1次元)」を表しています。

np.intersect1d()

では次はnp.intersect1d()について見ていきましょう。np.intersect1d()は上記で見た積集合を返します。以下のように引数に配列を二つ渡すと積集合が返されます。

  1. arr1 = np.array([1, 2, 3, 4, 5])
  2. arr2 = np.array([4, 5, 6, 7, 8])
  3. arr3 = np.intersect1d(arr1, arr2)
  4. print(arr3)
[4 5]    # 積集合

arr1とarr2の共通要素である4と5が返されました。

ちなみに「intersect」は「交差する」「交わる」などの意味を持ちます。

np.setdiff1d()

では次はnp.setdiff1d()について見ていきましょう。np.setdiff1d()は差集合を返す集合関数です。

差集合とは一方の集合要素からもう一方の集合要素を差し引いた集合です。例えば以下は差集合の例ですが、配列arr1からarr2の要素が取り除かれた配列が出力されています。

  1. arr1 = np.array([1, 2, 3, 4, 5])
  2. arr2 = np.array([4, 5])
  3. arr3 = np.setdiff1d(arr1, arr2)
  4. print(arr3)
[1 2 3]    # 差集合

上記の例ではarr1からarr2の配列要素である4と5が取り除かれた値が出力されています。

ちなみに「diff」は「difference」の略語であり「相違点」などの意味を持ちます。

setxor1d()

続いてsetxor1d()について見ていきます。setxor1d()は2つの集合の排他的論理和を返します。排他的論理和とは、例えばxとyという2つの配列があった場合にxとyのどちらか一方にのみ属する要素を返します。

具体例を見ていきましょう。以下の配列arr1とarr2があった場合をみていきます。排他的論理和では以下のようにarr1にのみ属している要素「1、2、3」とarr2にのみ属している要素「6、7、8」を返します。

  1. arr1 = np.array([1, 2, 3, 4, 5])
  2. arr2 = np.array([4, 5, 6, 7, 8])
  3. arr3 = np.setxor1d(arr1, arr2)
  4. print(arr3)
[1 2 3 6 7 8]    # 排他的論理和

このように np.setxor1d()は2つの配列のどちらか一方にのみ属する要素、つまり共通要素を取り除いた配列を返します。

np.in1d()

続いてnp.in1d()について見ていきます。

np.in1d(x, y)は第一引数に配列を指定し、第二引数に要素を指定します。つまりnp.in1d(配列x, 指定要素y)となります。

そしてnp.in1d(配列x, 指定要素y)は第一引数に指定した配列xに対して指定要素yが含まれている個所をTrueで返します。
例えば以下の配列arrに対してnp.in1d()で要素1を指定した場合、arrの配列要素1の個所がTrueとなった真偽値配列が返ってきます。

  1. arr = np.array([1, 2, 3])
  2. arr2 = np.in1d(arr, 1)
  3. print(arr2)
[ True False False]    # 要素1の個所がTrueとなる真偽値配列

np.unique()

np.unique()は引数に指定した配列の重複を排除した配列(ユニークな配列)を返します。

以下の例では配列arr1の重複要素である1, 2, 3を排除しています。

  1. arr1 = np.array([1, 1, 2, 2, 3, 3, 4, 5])
  2. arr2 = np.unique(arr1)
  3. print(arr2)
[1 2 3 4 5]    # 重複要素を除外

np.unique()により重複要素を排除した配列が返されました。

ちなみに「unique」は「唯一の」という意味を持ち、値が一意であることを表す際に使用します。この「unique」はプログラミングではよく登場する英単語ですので覚えておきましょう。

まとめ

このレッスンでは集合関数について学習しました。以下がこのレッスンで学習した集合関数となります。

関数説明
np.union1d(x, y)和集合
np.intersect1d(x, y)積集合
np.setdiff1d(x, y)差集合
setxor1d(x, y)排他的論理和
np.in1d(x, y)配列xに指定要素yが含まれている場合にTrueを返す
np.unique(x, y)重複要素を取り除き、ソートした結果を返す

ではこのレッスンは以上となります。演習課題にチャレンジしましょう。

Lesson1

arr1とarr2の和集合を出力してください。

Lesson2

arr1とarr1の積集合を出力してください。

Last updated:2019/11/2

[ 5 10 15 20 25 30 35]
[15 20 25]
  1. import numpy as np

  2. arr1 = np.array([5, 10, 15, 20, 25])
  3. arr2 = np.array([15, 20, 25, 30, 35])

  4. # 1. arr1とarr2の和集合を出力してください

  5. arr3 = np.union1d(arr1, arr2)
  6. print(arr3)

  7. # 2. arr1とarr2の積集合を出力してください

  8. arr4 = np.intersect1d(arr1, arr2)
  9. print(arr4)
main.py
設定
g
n
i
d
a
o
L