The sky is the limit

Vue.js、PHP、Java、Cordova、Monacaを中心にハイブリッドアプリ開発、PWA開発など効率的なWEB、iOS、Androidアプリ開発の情報を共有します。

【Numpy】集合関数(重複削除/和集合/積集合/差集合)を勉強する【unique/union1d/intersect1d/setdiff1d】

【Numpy】集合関数(重複削除/和集合/積集合/差集合)を勉強する【unique/union1d/intersect1d/setdiff1d】

f:id:duo-taro100:20160218004611p:plain

今回はNumpyの数値計算に使う集合関数についてまとめてみました。

np.unique - 重複削除

np.uniqueは配列要素に重複がある場合、重複を取り除く関数になります。

実装
import numpy as np

arr = [1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9]

unique_arr = np.unique(arr);
print(arr)
print(type(arr))
print(unique_arr)
print(type(unique_arr))

上記の配列では「1」と「2」が重複しています。

結果

// 元の配列
[1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9]
list

// 重複削除後の配列
[1 2 3 4 5 6 7 8 9]
numpy.ndarray

まずは想定通り、重複している要素が削除されています。
この時、重複している内の後ろの要素が削除されていることがわかります。
また、Numpyの関数を使ったということもあり、型が「list」から「numpy.ndarray」に変わっています。

np.union1d - 和集合

np.union1dは二つの配列を引数に、それぞれの配列を重複要素がないように結合してくれます。

実装
arr1 = [1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5]

arr3 = [6, 7, 8, 9, 1, 2, 3, 4, 5, 1, 2]
arr4 = [1, 2, 3, 4, 5]

unique1d_arr1 = np.union1d(arr1, arr2);
print(unique1d_arr1)
print(type(unique1d_arr1))

unique1d_arr2 = np.union1d(arr3, arr4);
print(unique1d_arr2)
結果

// unique1d_arr1
[1 2 3 4 5 6 7 8 9]
numpy.ndarray

// unique1d_arr2
[1 2 3 4 5 6 7 8 9]

重複しないように二つの配列を結合してくれています。
また、二つの実験からわかるように、結合した後は数値の昇順でソートされていることもわかります。

np.intersect1d - 積集合

np.intersect1dは二つの配列を引数に、それぞれの配列の重複要素のみを抽出してくれます。

実装
arr1 = [1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5]

arr3 = [6, 7, 8, 9, 1, 2, 3, 4, 5, 1, 2]
arr4 = [1, 2, 3, 4, 5]

intersect1d_arr1 = np.intersect1d(arr1, arr2);
print(intersect1d_arr1)
print(type(intersect1d_arr1))

intersect1d_arr2 = np.intersect1d(arr3, arr4);
print(intersect1d_arr2)

arr1とarr2、arr3とarr4はともに「1」、「2」、「3」、「4」、「5」が重複しています。

結果

// intersect1d_arr1
[1 2 3 4 5]
numpy.ndarray

// intersect1d_arr2
[1 2 3 4 5]

こちらも想定通りで、重複していた「1」、「2」、「3」、「4」、「5」のみが配列として出力されています。
和集合と同様に、数値の昇順でソートされていることもわかります。

np.setdiff1d - 差集合

np.setdiff1dは二つの配列を引数に、それぞれの配列の重複していない要素のみを抽出してくれます。

実装
arr1 = [1, 2, 3, 4, 5, 1, 2, 6, 7, 8, 9]
arr2 = [1, 2, 3, 4, 5]

arr3 = [6, 7, 8, 9, 1, 2, 3, 4, 5, 1, 2]
arr4 = [1, 2, 3, 4, 5]

setdiff1d_arr1 = np.setdiff1d(arr1, arr2);
print(setdiff1d_arr1)
print(type(setdiff1d_arr1))

setdiff1d_arr2 = np.setdiff1d(arr3, arr4);
print(setdiff1d_arr2)

arr1とarr2、arr3とarr4はともに「6」、「7」、「8」、「9」が重複していない要素です。

結果

// setdiff1d_arr1
[6 7 8 9]
numpy.ndarray

// setdiff1d_arr2
[6 7 8 9]

こちらも想定通りで、重複していない「6」、「7」、「8」、「9」のみが配列として出力されています。
同様に、数値の昇順でソートされていることもわかります。

以上が、Numpyの集合関数のまとめでした。
これらの関数は一次元配列での使用を考えられてことに注意してください。