本文记录日常工作中遇到的查找操作,持续更新。

注意:输入必须是 数组,不能是 list

极值

min,max 返回极值

argmin(a, axis=None, out=None), 返回极值所在的位置;不带 axis,先拉直,再找极值;带 axis,找某个维度的极值

  1. b = np.array([[1, 2, 3, 5], [4, 6, 2, 6]])
  2. print(np.max(b)) # 返回最大值 6
  3. print(np.min(b)) # 返回最小值 1
  4. print(np.argmax(b)) # 返回第一个最大值的位置 5
  5. print(np.argmin(b)) # 返回第一个最小值的位置 0
  6.  
  7. print(np.argmin(b, axis=1)) # [0 2]

NaN值

nan 值由多种表达形式,如 None,np.nan,np.NaN等

isnan,输入可以是 一维,也可以是 二维,返回布尔索引

  1. x = np.array(range(10), dtype=np.float)
  2. y = np.array(range(10,20))
  3. print(x.shape) # (10,)
  4. print(x) # [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
  5. print(y) # [10 11 12 13 14 15 16 17 18 19]
  6. x[3] = None # 插入 nan
  7. x[5] = np.NaN # 插入 nan
  8. print(x) # [ 0. 1. 2. nan 4. nan 6. 7. 8. 9.]
  9.  
  10. # isnan 返回索引
  11. print(np.isnan(x)) # [False False False True False True False False False False]
  12. print(y[np.isnan(x)]) # [13 15]
  13. print(y[~np.isnan(x)]) # [10 11 12 14 16 17 18 19]

如果想返回数值索引,可如下操作

  1. data4 = np.array([1, 3, np.nan, 5])
  2.  
  3. ## isnan 返回 nan 值的布尔下标
  4. print np.isnan(data4) # [False False True False]
  5.  
  6. ## where 找到 nan 值的数值下标
  7. print np.where(np.isnan(data4)) # (array([2]),)
  8. print np.where(~np.isnan(data4)) # (array([0, 1, 3]),)

注意,nan 值 不能用 where 查找

  1. print(np.where(x != np.NaN)) # (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),) 这样不行

经常遇到这么一个错误

  1. TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

错误原因:有异常的数据类型,非 int float

解决方法:转换数据类型,.astype('float')

where 条件

where,返回tuple,第一个值是索引,第二个是空值

1. 输入必须是 数组,不能是 list

2. 输入一般是一维,行向量或者列向量都可以

3. 输入多维,将返回两个索引,行向量或者列向量返回不同

argwhere,直接返回索引,返回为二维数组,列向量

  1. # list 返回错误
  2. data = range(10)
  3. print np.where(data>6) # (array([0]),)
  4.  
  5. # 一维数组
  6. data1 = np.array(range(0, 20, 2))
  7. print np.where(data1>6) # (array([7, 8, 9]),)
  8. print np.where(data1.T>6) # (array([7, 8, 9]),)
  9.  
  10. # 二维数组
  11. data2 = np.array([range(0, 20, 2)])
  12. print np.where(data2>6) # (array([0, 0, 0]), array([7, 8, 9]))
  13.  
  14. # 多行多列
  15. data3 = np.array([range(10), range(10)])
  16. print(data3)
  17. print np.where(data3>6) # (array([0, 0, 0, 1, 1, 1]), array([7, 8, 9, 7, 8, 9]))
  18. print np.where(data3.T>6) # (array([7, 7, 8, 8, 9, 9]), array([0, 1, 0, 1, 0, 1]))
  19.  
  20. ## argwhere 直接返回索引
  21. print np.argwhere(data1>6)
  22. # [[4]
  23. # [5]
  24. # [6]
  25. # [7]
  26. # [8]
  27. # [9]]
  28. print np.argwhere(data1.T>6)
  29. # [[4]
  30. # [5]
  31. # [6]
  32. # [7]
  33. # [8]
  34. # [9]]

where 也可输入多个条件

  1. # 求公共部分
  2. print np.intersect1d([1, 4, 3], [3, 4, 5]) # [3 4]
  3.  
  4. # 多个条件
  5. data2 = np.array([1,5, 11,16,20])
  6. print np.where(data2>10) # (array([2, 3, 4]),)
  7.  
  8. print np.where((data2>10) & (data2<18)) # (array([2, 3]),)
  9. print np.where(np.logical_and(data2>10, data2<18)) # (array([2, 3]),)
  10. print np.intersect1d(np.where(data2>10)[0], np.where(data2<18)[0]) # [2 3]

extract 条件

extract(condition, arr),按某条件查找,返回元素

  1. print(np.extract(np.isnan(x), x)) # [nan nan]
  2. print(np.extract(np.isnan(x), y)) # [13 15]
  3. print(np.extract(x>8, x)) # [9.]

非0元素

nonzero,返回tuple,第一个值是索引,第二个是空值

  1. x = [1, 0, 3, 0]
  2. print(np.nonzero(x)) # (array([0, 2]),)

未完待续...

numpy-查找操作大全的更多相关文章

  1. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...

  2. PHP数组操作大全

    <?php /** * File: phpstudy : array_test.php * Created by PhpStorm. * User: IhMfLy Pheonix@jtv-070 ...

  3. SQL语句操作大全

    SQL语句操作大全   本文分为以下六个部分: 基础部分 提升部分 技巧部分 数据开发–经典部分 SQL Server基本函数部分 常识部分 一.基础 1.说明:创建数据库CREATE DATABAS ...

  4. MATLAB命令大全和矩阵操作大全

    转载自: http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示在MATLAB中创建矩阵 ...

  5. numpy 基础操作

    Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...

  6. SQLite3命令操作大全

    SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...

  7. Numpy 数组操作

    Numpy 数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resh ...

  8. MATLAB矩阵操作大全

    转载自:http://blog.csdn.net/dengjianqiang2011/article/details/8753807 MATLAB矩阵操作大全 一.矩阵的表示 在MATLAB中创建矩阵 ...

  9. 二叉排序树(BST)创建,删除,查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  10. Delphi Excel 操作大全

    Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...

随机推荐

  1. @Transient使用心得

    使用注解@Transient使表中没有此字段 注意,实体类中要使用org.springframework.data.annotation.Transient 在写实体类时发现有加@Transient注 ...

  2. POI 生成excel

    POI生成原生Excel-工具类     https://www.jianshu.com/p/2dfe7fe7d02e JAVA poi 帮助类  https://www.cnblogs.com/Ca ...

  3. 20175215 2018-2019-2 第六周java课程学习总结

    第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...

  4. linux下快速查找文件(转载)

    权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xxmonstor/article/deta ...

  5. ubuntu 16.04 安装最新的 docker

      转载地址:https://www.cnblogs.com/tianhei/p/7802064.html 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose ...

  6. centos6 升级php版本

    配置yum源 追加CentOS 6.8的epel及remi源. # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel- ...

  7. debug1: Could not open authorized keys

    ssh登录的时候一直日志一直出现debug1: Could not open authorized keys登录不上,检查文件夹权限都正常用这条命令解决了 restorecon -FRvv /home ...

  8. windows怎么远程访问deepin linux桌面

    deepin linux端安装anydesk 1.首先点击打开任务栏上的“深度商店” 2.打开后搜索anydesk. 3.点击进入后按“安装”即可,安装完成即可在“深度商店”点击“打开”运行anyde ...

  9. P3373 【模板】线段树 2 (未完待续)

    P3373 [模板]线段树 2 强烈安利这个大佬 超赞!!! 题解 本来以为这个题拿着线段树1的板子改改就好了,但是发现事情并没有那么简单,改了两天... 我们看到这个题其实涉及啦乘法和加法两种运算, ...

  10. PDS常用快捷键

    绿色在Layout和Router中共用 1.PDS常用快捷键:2019-07-28 17:06:07 快捷键 说明 备注 shiftt + 左键双击 布线状态下,进行过孔放置   ctrl + 左键双 ...