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版简单工厂模式
Oct 16 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
python画双y轴图像的示例代码
Jul 07 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
python hash每次调用结果不同的原因
Nov 21 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 Python
用python修改excel表某一列内容的操作方法
Jun 11 Python
Python中文分词库jieba(结巴分词)详细使用介绍
Apr 07 Python
一行代码python实现文件共享服务器
Apr 22 #Python
python数据分析之用sklearn预测糖尿病
python文件名批量重命名脚本实例代码
python爬虫之爬取笔趣阁小说
python获取淘宝服务器时间的代码示例
Apr 22 #Python
详解Django中 render() 函数的使用方法
python tkinter实现定时关机
You might like
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
vue中轮训器的使用
2019/01/27 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
JavaScript实现网页下拉菜单效果
2020/11/20 Javascript
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Python如何发布程序的详细教程
2018/10/09 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
PHP经典面试题
2016/09/03 面试题
英文简历自荐信范文
2013/12/11 职场文书
村庄环境整治方案
2014/05/15 职场文书
父亲节活动策划方案
2014/08/24 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
世界遗产的导游词
2015/02/13 职场文书
北京青年观后感
2015/06/15 职场文书
小学英语教学随笔
2015/08/14 职场文书
四则混合运算教学反思
2016/02/23 职场文书