numpy中的数组之间进行集合运算

摘要:
楔子我们知道python的set对象是可以取交集、并集、差集、对称差集的,但是对于numpy有没有这个方法呢?有时候我们在使用pandas处理数据的时候,不希望再单独转化为集合再进行处理,而numpy也是支持我们这么做的,下面来看一下。importnumpyasnparr1=np.arrayarr2=np.array#两个数组进行&,表示将数组里面对应元素分别进行"按位与"操作print#[020]所以,我们需要使用numpy提供的api进行运算importnumpyasnparr1=np.arrayarr2=np.array#取交集print#[23]#取并集print#[1234]#取差集print#[1][4]#取对称差集print#[14]接收两个array,返回一个array。

楔子

我们知道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中的数组之间进行集合运算》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇缓冲器的学习Android中Handler的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Numpy —— (1)基础数据结构

@ 目录 一、简介 二、创建ndarray数组 三、查看ndarray数组的属性 四、改变ndarray数组的数据类型和形状 五、ndarray数组的基本运算 5.1 标量和ndarray数组之间的运算 5.2 两个ndarray数组之间的运算 六、ndarray数组的统计方法 打赏 一、简介 Python中的list列表也可以非常灵活的处理...

【Python之路】特别篇--ECMA对象、DOM对象、BOM对象

ECMA对象从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。 ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。 var o = new Object(); 对象的概念与分类: 由ECMAScript定义的本地对象.独立于宿主环境的 ECMAS...

黑马程序员——JAVA学习笔记八(集合)

1,    JAVA最初版本只为最常用的数据结构提供了很少的一组类:Vector、Stack、Hashtable、BitSet与Enumeration接口,从JAVA1.2版本开始推出了一组功能完善的的数据结构。 集合类的由来:  对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。  就使用集合容器进行存储。 集合特点: 1,用于存储对象的容器...

JavaScript-基础知识

一、JavaScript-简介Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) JavaScript历史背景介绍 布兰登 • 艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。 开始JavaS...

php Redis函数使用总结(string,hash,list, set , sort set )

  对于:string, set , sort set , hash 的增,改操作,是同一个命令,但是把它当改操作时,及时成功返回值依旧为0 对于:list结构来说,增删改查自有一套方法。   1 <?php 2 /*1.Connection*/ 3 $redis = new Redis(); 4 $redis-...

Spring学习笔记(14)——SpEL

是什么 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并能与Spring功能完美整合。 表达式语言给静态Java语言增加了动态功能。 SpEL是单独模块,只依赖于core模块,...