Python Numpy中數組的集合操作詳解

我們知道兩個 set 對象之間,可以取交集、並集、差集、對稱差集,舉個例子:

s1 = {1, 2, 3}
s2 = {2, 3, 4}

"""
&: 交集
|: 並集 
-: 差集
^: 對稱差集
"""

# 以下幾種方式是等價的
# 但是一般我們都會使用操作符來進行處理,因為比較方便
print(s1 & s1)
print(s1.intersection(s2))
print(set.intersection(s1, s2))
"""
{2, 3}
{2, 3}
{2, 3}
"""

print(s1 | s2)
print(s1.union(s2))
print(set.union(s1, s1))
"""
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 3, 4}
"""

print(s1 - s2, s2 - s1)
print(s1.difference(s2),
      s2.difference(s1))
print(set.difference(s1, s2),
      set.difference(s2, s1))
"""
{1} {4}
{1} {4}
{1} {4}
"""

print(s1 ^ s2)
print(s1.symmetric_difference(s2))
print(set.symmetric_difference(s1, s2))
"""
{1, 4}
{1, 4}
{1, 4}
"""

# 另外,我們還可以同時對多個集合操作,不僅僅是兩個
print({1, 2, 3} & {2, 3, 4} & {3, 4, 5})  # {3}

那麼 Numpy 的數組之間,可不可以執行這些操作呢?答案是可以的,Numpy 提供瞭一些 API,用於數組之間的集合運算。

但需要註意,數組雖然也支持 & 等操作符,但是它們代表的意義和集合無關。

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 3, 4])

# 兩個數組 &
# 表示將數組裡面對應的元素分別進行"按位與"操作
print(arr1 & arr2)  # [0 2 0]

所以我們需要使用 Numpy 提供的 API 進行運算。

import numpy as np

arr1 = np.array([1, 2, 2, 3])
arr2 = np.array([2, 3, 4, 4])

# 取交集
print(
    np.intersect1d(arr1, arr2)
)  # [2 3]

# 取並集
print(
    np.union1d(arr1, arr2)
)  # [1 2 3 4]

# 取差集
print(
    np.setdiff1d(arr1, arr2),
    np.setdiff1d(arr2, arr1)
)  # [1] [4]

# 取對稱差集
print(
    np.setxor1d(arr1, arr2)
)  # [1 4]

接收兩個數組,返回一個數組。並且原始數組中的元素允許重復,對結果沒有影響。

另外,上面的函數都隻能接收兩個數組,如果我們想同時對任意多個數組操作呢?很簡單,使用 reduce 即可。

from functools import reduce
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 3, 4])
arr3 = np.array([3, 4, 5])

print(
    reduce(np.intersect1d,
           [arr1, arr2, arr3])
)  # [3]

總的來說還是比較簡單的。

到此這篇關於Python Numpy中數組的集合操作詳解的文章就介紹到這瞭,更多相關Numpy數組集合操作內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: