Numpy中的数组搜索中np.where方法详细介绍


Posted in Python onJanuary 08, 2021

numpy.where (condition[, x, y])

numpy.where() 有两种用法:

1. np.where(condition, x, y)

满足条件(condition),输出x,不满足输出y。

如果是一维数组,相当于[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]

>>> aa = np.arange(10)
>>> np.where(aa,1,-1)
array([-1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # 0为False,所以第一个输出-1
>>> np.where(aa > 5,1,-1)
array([-1, -1, -1, -1, -1, -1, 1, 1, 1, 1])

>>> np.where([[True,False], [True,True]],  # 官网上的例子
  [[1,2], [3,4]],
       [[9,8], [7,6]])
array([[1, 8],
  [3, 4]])

上面这个例子的条件为[[True,False], [True,False]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。类似的问题可以再看个例子:

>>> a = 10
>>> np.where([[a > 5,a < 5], [a == 10,a == 7]],
       [["chosen","not chosen"], ["chosen","not chosen"]],
       [["not chosen","chosen"], ["not chosen","chosen"]])

array([['chosen', 'chosen'],
    ['chosen', 'chosen']], dtype='<U10')

2. np.where(condition)

只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5)  # 返回索引
(array([2, 3, 4]),)  
>>> a[np.where(a > 5)]   # 等价于 a[a>5]
array([ 6, 8, 10])

>>> np.where([[0, 1], [1, 0]])
(array([0, 1]), array([1, 0]))

上面这个例子条件中[[0,1],[1,0]]的真值为两个1,各自的第一维坐标为[0,1],第二维坐标为[1,0] 。

下面看个复杂点的例子:

>>> a = np.arange(27).reshape(3,3,3)
>>> a
array([[[ 0, 1, 2],
    [ 3, 4, 5],
    [ 6, 7, 8]],

    [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],

    [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]])

>>> np.where(a > 5)
(array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2]),
 array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2]),
 array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]))

# 符合条件的元素为
  [ 6, 7, 8]],

   [[ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]],

   [[18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]]]

所以np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。

补充

np.where和np.searchsorted同属于Numpy数组搜索的一部分,这里先介绍简单的where

import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.where(a == 5)

print(b)

where方法将会返回一个元祖

(array([4]),)

此外还将介绍一个搜索奇数和偶数的方法(数组全都默认使用最上面的a数组)

可见,简单的判断余数即可

c = np.where(a%2 == 0)
print(c)

d = np.where(a%2 == 1)
print(d)

返回:

(array([1, 3]),)
(array([0, 2, 4]),)

关于np.where方法到这里就结束啦

到此这篇关于Numpy中的数组搜索中np.where方法详细介绍的文章就介绍到这了,更多相关Numpy np.where 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
python服务器端收发请求的实现代码
Sep 29 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
彻底理解Python list切片原理
Oct 27 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
Python队列、进程间通信、线程案例
Oct 25 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
python基于tkinter实现gif录屏功能
May 19 Python
python 窃取摄像头照片的实现示例
Jan 08 #Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 #Python
Opencv+Python识别PCB板图片的步骤
Jan 07 #Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 #Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 #Python
Django权限控制的使用
Jan 07 #Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
You might like
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
PHP引用返回用法示例
2016/05/28 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
再论Javascript的类继承
2011/03/05 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python变量访问权限控制详解
2019/06/29 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
护理专业的自荐信
2013/10/22 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
企业安全生产责任书
2014/04/14 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
2015年安全月活动总结
2015/03/26 职场文书
运动会广播稿50字
2015/08/19 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL