网络编程
位置:首页>> 网络编程>> Python编程>> python numpy中setdiff1d的用法说明

python numpy中setdiff1d的用法说明

作者:悲恋花丶无心之人  发布时间:2022-06-12 21:27:58 

标签:python,numpy,setdiff1d

一、函数解释


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的用法说明

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

来源:https://nickhuang1996.blog.csdn.net/article/details/89916399

0
投稿

猜你喜欢

  • 目录正文开始1. DRF 中的限流2. 限流进阶配置3. 限流思路分析4. 源码分析5. 其它注意事项参考资料正文开始先说一个限流这个概念,
  • 前文学习:python数据类型: python数据结构:数据类型.python的输入输出: python数据结构输入输出及控制和异常.pyt
  • 目的我们的目标是安装一个允许我们托管多个网站的web服务器,其中一些是针对电子商务的安全解决方案,而大部分网站是通过连接一个数据库服务器并且
  • 从2004年开始,我开始进入雅虎的异常表现小组。我们是一个很小的队伍,专门针对雅虎的产品进行质量检测和改进,我作为一个后端工程师,现在却开始
  • 现在IE7已经推出一段时间并且渗透到用户当中,不用等太久我们就可以在页面上使用更高级的CSS。两个最有用的项目将是 Child子和Adjac
  • 今天把Ext.js源码又读了一遍,不过这次比较认真。看完代码,有了不少收获也遇到不少问题。主要总结如下:1、document.execCom
  • 在团队意见PK中,运用对方的知识背景说服对方,这就是技术性击倒。这样通常能把对方驳得哑口无言,我经常被这样击倒,甚至觉得怎么那么多牛逼的设计
  • 平面设计 常用尺寸 三折页广告 标准尺寸: (A4)210mm x 285mm普通宣传册 标准尺寸: (A4)210mm x 285mm文件
  • 昨天我突发奇想,想用display:inline来实现三列的布局可是搞了半天就是不行。但是理论上是可以的呀(后来才发现是不理解的不深刻,我的
  • 【译者的话】 作为一家非盈利性的防止青少年 * 的机构, Five Alive 希望拥有一个独特的标志来配合机构的宣传。他们决定在网站上通过竞
  • 综述:本文讨论了VBScript和 JScript之间的区别,以及它们的使用场合。推荐:Vbscript5.5中文语言参考手册chm格式下载
  • 昨天我问过这个问题怎么用ADODB.Stream来读取或写入文件,而不是用fso,不过没人回答到点上,今天搞定了.贴出来给觉得有用的朋友,希
  • <? //以树型结构列出指定目录里的所有文件,如果你想知道自己某个目录里有哪些子目录和文件,可以调用这个类来查看,很方便的。 &nbs
  • 我就废话不多说了,大家还是直接看代码吧!# coding=utf-8import loggingimport yamlimport osim
  • 在一次ASP程序中不能正常连接MSSQL出现出错信息如下:以下为引用的内容:HTTP/1.1 200 OK S
  • 工厂模式(Factory Pattern)是什么工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会
  • 看代码吧~package mainimport ("fmt""io""net/http&q
  • 说到客户端数据存储,可能第一时间想到的是cookies,这是一种网站常见的存储数据的方法。它的最大优点是兼容性好,几乎所有浏览器都具有这个功
  • pytorch中index_select()的用法index_select(input, dim, index)功能:在指定的维度dim上选
  • 引言在观察OpenCV中某个函数在不同参数的情况下,所得到的效果的时候,我之前是改一次参数运行一次,这样做起来操作麻烦,效率低下。为了更便捷
手机版 网络编程 asp之家 www.aspxhome.com