Numpy 数组的一些集合操作

简介: Numpy 数组的一些集合操作

我们知道两个 set 对象之间,可以取交集、并集、差集、对称差集,举个例子:

s1 = {1, 2, 3}
s2 = {2, 3, 4}
"""
&: 交集
|: 并集 
-: 差集
^: 对称差集
"""
# 以下几种方式是等价的
# 但是一般我们都会使用操作符来进行处理,因为比较方便
print(s1 & s2)
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, s2))
"""
{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]

总的来说还是比较简单的。

相关文章
|
2月前
|
数据处理 索引 Python
NumPy 数组操作:和普通操作相较,到底蕴含着怎样令人费解的独特魅力?
【8月更文挑战第19天】NumPy是Python科学计算核心库,提供高效数组操作。不同于Python列表直接列举创建,NumPy用`np.array()`创建数组。两者都支持索引和切片,但NumPy性能更优。数学运算方面,NumPy支持简洁的向量化操作,如`my_array * 2`,无需循环。NumPy还简化了数组形状变换,如使用`reshape()`方法。此外,NumPy数组要求元素类型一致,提高了内存使用效率和计算速度。这些特点使NumPy在科学计算和数据分析中不可或缺。
28 0
|
3天前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
2天前
|
编译器 Linux API
基于类型化 memoryview 让 Numpy 数组和 C 数组共享内存
基于类型化 memoryview 让 Numpy 数组和 C 数组共享内存
9 0
|
2月前
|
存储 缓存 C语言
|
2月前
|
索引 Python
|
2月前
|
索引 Python
NumPy 快速入门:数组操作基础
【8月更文第30天】NumPy 是 Python 中一个非常重要的科学计算库,它提供了高性能的多维数组对象以及用于操作这些数组的工具。NumPy 数组(也称为 `ndarray`)是 NumPy 库的核心,它比 Python 内置的列表类型更高效,特别是在处理大型数据集时。本文将介绍 NumPy 数组的基本概念、创建方法以及一些常用的数组操作。
19 2
|
2月前
|
数据挖掘 索引 Python
NumPy 教程 之 Numpy 数组操作 30
展示了如何使用`numpy.unique`去除数组中的重复值,并获取额外信息如索引和计数。示例中,数组`a`的重复值被去除,打印出唯一值及其在原数组中的首次出现索引、对应原值的索引以及各唯一元素的出现次数。这有助于数据分析时简化数据集。
28 2
|
2月前
|
Python
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
25 0
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
图解NumPy,这是理解数组最形象的一份教程了
图解NumPy,这是理解数组最形象的一份教程了
|
4天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
15 0