日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:古明地覺 ? 更新時間: 2022-10-06 編程語言

我們知道兩個 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]

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

原文鏈接:https://mp.weixin.qq.com/s/DCet9vqT_aV-N2LIIQ_9Og

欄目分類
最近更新