numpy.where() 用法详解


Posted in Python onMay 27, 2019

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中有三个数组。

1、numpy.where的返回结果

numpy.where调用方式为numpy.where(condition,1,2)

满足条件的位置上返回结果1,不满足的位置上返回结果2

 例如通过where()函数将a数组中负值设为0,正值不变

numpy.where() 用法详解

如果没有指定返回结果,只有查找条件则返回满足条件的位置。返回的结果是一个元组(tuple),包含两个数组,第一个数组纪录的是行,第二个数组纪录的是列。

numpy.where() 用法详解

可以使用zip函数将返回的位置组成一个个坐标对,方便调用。zip函数直接返回的是一个对象,可以用过for循环遍历出里面的元素,也可以使用list直接列出所有坐标对元素。

numpy.where() 用法详解

 2、numpy.where多条件查询

与: numpy.where((con1)*(con2))或者用&

或:numpy.where((con1)|(con2))  (重点:多条件查询时条件一定要用括号!一定要用括号!一定要用括号!)

numpy.where() 用法详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python转换摩斯密码示例
Feb 16 Python
在Python中实现贪婪排名算法的教程
Apr 17 Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
python动态性强类型用法实例
May 09 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
python实现批量注册网站用户的示例
Feb 22 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
python3图片文件批量重命名处理
Oct 31 Python
jupyter notebook 增加kernel教程
Apr 10 Python
python numpy实现文件存取的示例代码
May 26 #Python
numpy linalg模块的具体使用方法
May 26 #Python
python flask解析json数据不完整的解决方法
May 26 #Python
如何使用pyinstaller打包32位的exe程序
May 26 #Python
让你Python到很爽的加速递归函数的装饰器
May 26 #Python
Django框架模板的使用方法示例
May 25 #Python
Django框架搭建的简易图书信息网站案例
May 25 #Python
You might like
理解PHP5中static和const关键字的区别
2007/03/19 PHP
实用函数9
2007/11/08 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
进一步探究Python中的正则表达式
2015/04/28 Python
python Django框架实现自定义表单提交
2016/03/25 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
Python银行系统实战源码
2019/10/25 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
瑞典度假品牌:OAS
2019/05/28 全球购物
new修饰符是起什么作用
2015/06/28 面试题
应届毕业生个人自我评价
2013/09/20 职场文书
医务人员自我评价
2014/01/26 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
《分数的意义》教学反思
2016/02/20 职场文书