python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Numpy数组集合操作

Python Numpy中数组的集合操作详解

作者:古明地觉

这篇文章主要为大家详细介绍了Python Numpy中数组的一些集合操作方法,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下

我们知道两个 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数组集合操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文