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生成随机mac地址的方法
Mar 16 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python实现银联支付和支付宝支付接入
May 07 Python
python 标准差计算的实现(std)
Jul 29 Python
python重要函数eval多种用法解析
Jan 14 Python
python 下载文件的几种方式分享
Apr 07 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
一行代码python实现文件共享服务器
Apr 22 #Python
python数据分析之用sklearn预测糖尿病
python文件名批量重命名脚本实例代码
python爬虫之爬取笔趣阁小说
python获取淘宝服务器时间的代码示例
Apr 22 #Python
详解Django中 render() 函数的使用方法
python tkinter实现定时关机
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
2013/11/13 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
django实现模型字段动态choice的操作
2020/04/01 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
出纳员岗位职责
2014/03/13 职场文书
党员转正大会主持词
2015/07/02 职场文书
生活小常识广播稿
2015/08/19 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫