numpy中的数组之间进⾏集合运算
楔⼦
我们知道python的set对象是可以取交集、并集、差集、对称差集的,但是对于numpy有没有这个⽅法呢?有时候我们在使⽤pandas(底层基于numpy)处理数据的时候,不希望再单独转化为集合再进⾏处理,⽽numpy也是⽀持我们这么做的,下⾯来看⼀下。
集合运算
set中的集合运算
set中的集合运算,⽐较简单,我们还是简单看⼀下吧
set1 = {1, 2, 3}
set2 = {2, 3, 4}
"""
&: 交集
|: 并集
-: 差集
^: 对称差集
"""
# 以下⼏种⽅式是等价的,但是⼀般我们都会使⽤操作符来进⾏处理,因为⽐较⽅便
print(set1 & set2)  # {2, 3}
print(set1.intersection(set2))  # {2, 3}
print(set.intersection(set1, set2))  # {2, 3}
print(set1 | set2)  # {1, 2, 3, 4}
print(set1.union(set2))  # {1, 2, 3, 4}
print(set.union(set1, set2))  # {1, 2, 3, 4}
print(set1 - set2, set2 - set1)  # {1} {4}
print(set1.difference(set2), set2.difference(set1))  # {1} {4}
print(set.difference(set1, set2), set.difference(set2, set1))  # {1} {4}
print(set1 ^ set2)  # {1, 4}
print(set1.symmetric_difference(set2))  # {1, 4}
print(set.symmetric_difference(set1, set2))  # {1, 4}
"""
另外,以上所有的操作都⽀持多个集合,不仅仅只是两个
"""
print({1, 2, 3} & {2, 3, 4} & {3, 4, 5})  # {3}
numpy中的集合运算
numpy中的数组虽然也⽀持&等操作符,但是它们代表的意义和集合⽆关。
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, 3])
arr2 = np.array([2, 3, 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]
接收两个array,返回⼀个array。但是我们看到它和集合⼀个区别就是,集合要求⾥⾯的元素是不能重复的,但是数组却没有此要求。
import numpy as np
arr1 = np.array([1, 2, 2, 2, 3])
arr2 = np.array([2, 3, 4])
print(np.intersect1d(arr1, arr2))  # [2 3]
print(np.union1d(arr1, arr2))  # [1 2 3 4]
但是我们上⾯只能传⼊两个数组,如果有多个数组呢?
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]总的来说还是⽐较简单的
>numpy教程pdf

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。