python numpy中setdiff1d的用法说明


Posted in Python onApril 22, 2021

一、函数解释

setdiff1d(ar1, ar2, assume_unique=False)

1.功能:找到2个数组中集合元素的差异。

2.返回值:在ar1中但不在ar2中的已排序的唯一值。

3.参数:

ar1:array_like 输入数组。

ar2:array_like 输入比较数组。

assume_unique:bool。如果为True,则假定输入数组是唯一的,即可以加快计算速度。 默认值为False。

二、具体示例

1.assume_unique = False的情况:

a = np.array([1,2,3])
    b = np.array([4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2 3]
    a = np.array([1,2,3])
    b = np.array([1,2,3])
    c = np.setdiff1d(a, b)
    print(c)#[]
    a = np.array([1,2,3])
    b = np.array([2,3,4])
    c = np.setdiff1d(a, b)
    print(c)#[1]
    a = np.array([1,2,3,4])
    b = np.array([3,4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2]
    a = np.array([1,2,3,2,4,1])
    b = np.array([3,4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2]
    a = np.array([8,2,3,2,4,1])
    b = np.array([7,4,5,6,3])
    c = np.setdiff1d(a, b)
    print(c)#[1 2 8]

可以从最后看出返回的值从小到大排序,并且唯一。(8在a的第1位,2在a中重复了2次)

2.assume_unique = True的情况:

a = np.array([3,2,1])
    b = np.array([4,5,6])
    c = np.setdiff1d(a, b,True)
    print(c)#[3 2 1]
    a = np.array([8,2,3,2,4,1])
    b = np.array([7,4,5,6,3])
    c = np.setdiff1d(a, b,True)
    print(c)#[8 2 2 1]
    a = np.array([8,2,3,4,2,4,1])
    b = np.array([7,9,5,6,3])
    c = np.setdiff1d(a, b,True)
    print(c)#[8 2 4 2 4 1]

可以看出把在a中的但是不在b中的元素按a中的顺序排序,并且不合并重复的元素,即假定输入数组也是唯一的,因此相比于False确实提升了运算速度。

三、整体代码

import numpy as np 
def main():
    a = np.array([1,2,3])
    b = np.array([4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2 3]
    a = np.array([1,2,3])
    b = np.array([1,2,3])
    c = np.setdiff1d(a, b)
    print(c)#[]
    a = np.array([1,2,3])
    b = np.array([2,3,4])
    c = np.setdiff1d(a, b)
    print(c)#[1]
    a = np.array([1,2,3,4])
    b = np.array([3,4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2]
    a = np.array([1,2,3,2,4,1])
    b = np.array([3,4,5,6])
    c = np.setdiff1d(a, b)
    print(c)#[1 2]
    a = np.array([8,2,3,2,4,1])
    b = np.array([7,4,5,6,3])
    c = np.setdiff1d(a, b)
    print(c)#[1 2 8]
    a = np.array([3,2,1])
    b = np.array([4,5,6])
    c = np.setdiff1d(a, b,True)
    print(c)#[3 2 1]
    a = np.array([8,2,3,2,4,1])
    b = np.array([7,4,5,6,3])
    c = np.setdiff1d(a, b,True)
    print(c)#[8 2 2 1]
    a = np.array([8,2,3,4,2,4,1])
    b = np.array([7,9,5,6,3])
    c = np.setdiff1d(a, b,True)
    print(c)#[8 2 4 2 4 1]
 
if __name__ == '__main__':
    main()

python numpy中setdiff1d的用法说明

补充:Python编程之numpy库函数in1d的使用

最近利用Python作数值分析时使用到numpy库下的in1d函数。in1d函数与excel中vlookup函数和MATLAB中ismember函数有相似之处。其作用在于在序列B中寻找与序列A相同的值,并返回一逻辑值(True,False)或逻辑值构成的向量。

具体例子见下文

设mask为逻辑值向量,矩阵x的第一列为待查找向量,d为被查询向量(或值),即查找x中与d中指定元素相同的值,并返回逻辑值向量mask。mask是由一系列True和False值构成,True代表找到相同的值,而False代表没找到相同的值。演示如下:

mask= np.in1d(x.values[:,1],d[1],invert=False) ##x为DataFrame型数据,x.values[:,1]表示取第二列值
x_temp=x[mask]

示取第二列值

x_temp=x[mask]

该例旨在查找 x 的第二列值中与d向量中第二个元素相同的部分 ,并返回mask逻辑向量;然后x_temp返回x中mask逻辑值为True的行。

mask向量的类型为bool,查看具体值下图所示:

python numpy中setdiff1d的用法说明

python numpy中setdiff1d的用法说明

值得注意的地方在于in1d函数中invert参数的设置。当invert=True时,mask中的元素值为True的部分对x.values[:,1]中与当前查找的元素d[i]不同的部分(i为当前查找位置),相同的部分则为false;当invert=False时,mask中的元素值为True的部分对x.values[:,1]中与当前查找的元素d[i]相同的部分(i为当前查找位置)。

演示见下图:

当mask= np.in1d(x.values[:,1],d[2],invert=True)

python numpy中setdiff1d的用法说明

当mask= np.in1d(x.values[:,1],d[2],invert=False)时

python numpy中setdiff1d的用法说明

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python中getaddrinfo()基本用法实例分析
Jun 28 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
分析python切片原理和方法
Dec 19 Python
python删除过期log文件操作实例解析
Jan 31 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
一行代码python实现文件共享服务器
Apr 22 #Python
python数据分析之用sklearn预测糖尿病
python文件名批量重命名脚本实例代码
python爬虫之爬取笔趣阁小说
python获取淘宝服务器时间的代码示例
Apr 22 #Python
详解Django中 render() 函数的使用方法
python tkinter实现定时关机
You might like
用PHP产生动态的影像图
2006/10/09 PHP
jQuery 源码分析笔记
2011/05/25 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
jQuery的live()方法对hover事件的处理示例
2014/02/27 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python3 处理JSON的实例详解
2017/10/29 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
python实现倒计时小工具
2019/07/29 Python
中文系师范生自荐信
2013/10/01 职场文书
办公室年终个人自我评价
2013/10/28 职场文书
大学生演讲稿范文
2014/01/11 职场文书
房地产营销策划方案
2014/02/08 职场文书
社区母亲节活动方案
2014/03/05 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
开票证明
2015/06/23 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
Go语言编译原理之变量捕获
2022/08/05 Golang