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

(0)

相关推荐

  • Python中的Numpy 面向数组编程常见操作

    目录 数组编程 简单例子 逻辑条件作为数组操作 数学和统计方法 布尔数组的方法 排序 唯一值和其他的逻辑集合 数组编程 使用Numpy数组可以使你利用简单的数组表达式完成多项数据操作任务,而不需要编写大量的循环,这个极大的帮助了我们高效的解决问题.我们都知道向量化的数组操作比纯Python的等价实现在速度这一方面快很多,至于多少(一到两个数量级)甚至更多,生活需要慢节奏,但是计算就不可以了,掌握高效的计算模型,可以让数据分析如虎添翼! 简单例子 我们生成从-3.14--3.14,按照0.01的间

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • Python划分数组为连续数字集合的练习

    目录 1.问题描述 2.解决方案 3.结语 本文转自微信公众号:"算法与编程之美" 1.问题描述 给你一个整数数组 nums 和一个正整数 k,请你判断是否可以把这个数组划分成一些由 k 个连续数字组成的集合. 如果可以,请返回 True:否则,返回 False. 示例 1: 输入:nums = [1,2,3,3,4,4,5,6], k = 4 输出:true 解释:数组可以分成 [1,2,3,4] 和 [3,4,5,6]. 示例 2: 输入:nums = [3,2,1,2,3,4,3

  • Python Numpy 数组的初始化和基本操作

    Python 是一种高级的,动态的,多泛型的编程语言.Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法. 一.基础: Numpy的主要数据类型是ndarray,即多维数组.它有以下几个属性: ndarray.ndim:数组的维数 ndarray.shape:数组每一维的大小 ndarray.size:数组中全部元素的数量 ndarray.dtype:数组中元素的类型(numpy.int32, numpy.int16, and num

  • Python使用numpy模块创建数组操作示例

    本文实例讲述了Python使用numpy模块创建数组操作.分享给大家供大家参考,具体如下: 创建数组 创建ndarray 创建数组最简单的方法就是使用array函数.它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组. array函数创建数组 import numpy as np ndarray1 = np.array([1, 2, 3, 4]) ndarray2 = np.array(list('abcdefg')) ndarray3 = np.array([

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

    我们知道两个 set 对象之间,可以取交集.并集.差集.对称差集,举个例子: s1 = {1, 2, 3} s2 = {2, 3, 4} """ &: 交集 |: 并集  -: 差集 ^: 对称差集 """ # 以下几种方式是等价的 # 但是一般我们都会使用操作符来进行处理,因为比较方便 print(s1 & s1) print(s1.intersection(s2)) print(set.intersection(s1, s2)

  • Python Numpy中ndarray的常见操作

    目录 前言 0 Numpy基础知识 1 ndarray的属性 1.1 输出ndarray的常见属性 2 ndarray的数据类型 3 修改ndarray的形状和数据类型 3.1 查看和修改ndarray的形状 3.2 查看和修改ndarray的数据类型 4 ndarray数组创建 5 ndarray数组的常见运算 6 ndarray数组的索引.切片和迭代 7 ndarray数组的堆叠.拆分 前言 NumPy(Numerical Python)是Python的一种开源的数值计算扩展.这种工具可用来

  • 对Python 数组的切片操作详解

    高级特性 切片操作:对list,tuple元素进行截取操作,非常简便. L[0:3],L[:3] 截取前3个元素. L[1:3] 从1开始截取2个元素出来. L[-1] 取倒数第一个元素出来. L[-10] 取后10个数 L[10:20] 取前11-20个数 L[:10:2] 取前10个数,每两个取一个 L[::5] 所有数,每5个取一个 L[:] 原样复制一个list tuple,字符串也可以进行切片操作 以上这篇对Python 数组的切片操作详解就是小编分享给大家的全部内容了,希望能给大家一

  • 基于Python对数据shape的常见操作详解

    这一阵在用python做DRL建模的时候,尤其是在配合使用tensorflow的时候,加上tensorflow是先搭框架再跑数据,所以调试起来很不方便,经常遇到输入数据或者中间数据shape的类型不统一,导致一些op老是报错.而且由于水平菜,所以一些常用的数据shape转换操作也经常百度了还是忘,所以想再整理一下. 一.数据的基本属性 求一组数据的长度 a = [1,2,3,4,5,6,7,8,9,10,11,12] print(len(a)) print(np.size(a)) 求一组数据的s

  • python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳永逸.我把常用函数作了一个总结,最后写了一个例子,以后基本不用怎么改了. 一.作图流程: 1.准备数据, , 3作图, 4定制, 5保存, 6显示 1.数据可以是numpy数组,也可以是list 2创建画布: import matplotlib.pyplot as plt #figure(num=N

  • Python 分布式缓存之Reids数据类型操作详解

    1.Redis API 1.安装redis模块 $ pip3.8 install redis 2.使用redis模块 import redis # 连接redis的ip地址/主机名,port,password=None r = redis.Redis(host="127.0.0.1",port=6379,password="gs123456") 3.redis连接池 redis-py使用connection pool来管理对一个redis server的所有连接,避

  • Python必备技巧之字符数据操作详解

    目录 字符串操作 字符串 + 运算符 字符串 * 运算符 字符串 in 运算符 内置字符串函数 字符串索引 字符串切片 字符串切片中的步幅 将变量插入字符串 修改字符串 内置字符串方法 bytes对象 定义文字bytes对象 bytes使用内置bytes()函数定义对象 bytes对象操作,操作参考字符串. bytearray对象,Python 支持的另一种二进制序列类型 字符串操作 字符串 + 运算符 +运算符用于连接字符串,返回一个由连接在一起的操作数组成的字符串. >>> s =

  • 对python for 文件指定行读写操作详解

    1.os.mknod("test.txt") #创建空文件 2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件 3.关于open 模式: 详情: w:以写方式打开, a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开 (参见 w ) a+:以读写模式打开 (参见 a ) rb:以二进制读模式打开 wb:以二进制写模式打开 (参见 w ) ab:以二进制追加模式打开 (

  • 对python多线程中Lock()与RLock()锁详解

    资源总是有限的,程序运行如果对同一个对象进行操作,则有可能造成资源的争用,甚至导致死锁 也可能导致读写混乱 锁提供如下方法: 1.Lock.acquire([blocking]) 2.Lock.release() 3.threading.Lock() 加载线程的锁对象,是一个基本的锁对象,一次只能一个锁定,其余锁请求,需等待锁释放后才能获取 4.threading.RLock() 多重锁,在同一线程中可用被多次acquire.如果使用RLock,那么acquire和release必须成对出现,

  • Python+Selenium键盘鼠标模拟事件操作详解

    目录 元素的基本操作 鼠标键盘模拟事件操作 利用 Keys 模块模拟键盘操作事件 利用 Action 类模拟鼠标操作事件 当我们定位到具体的一个元素的时候就可以对这个元素进行具体的操作,比如之前章节所执行的 click 操作.这是最简单的操作,webdriver 还有其他的操作.比如元素的基本操作(点击.输入.清除),还有一些高级操作如鼠标键盘模拟事件.弹出框处理.多页面切换等… 这些都是需要我们了解的内容,也是在做自动化测试的时候经常遇到的一些基本场景.今天这一章节,我们就先来学习一下元素的基

随机推荐