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实现命令行版的火车票查看器
Aug 05 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Python及PyCharm下载与安装教程
Nov 18 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
Python中常见的异常总结
Feb 20 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
python实现Windows电脑定时关机
Jun 20 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
python实现指定文件夹下的指定文件移动到指定位置
Sep 17 Python
使用python动态生成波形曲线的实现
Dec 04 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python collections模块的使用方法
Oct 09 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
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
React Native时间转换格式工具类分享
2017/10/24 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
回顾Javascript React基础
2019/06/15 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
微信小程序实现多张图片上传功能
2020/11/18 Javascript
深入理解Django中内置的用户认证
2017/10/06 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
初级党校心得体会
2014/09/11 职场文书
教务处教学工作总结
2015/08/10 职场文书
SQL SERVER存储过程用法详解
2022/02/24 SQL Server
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
vue实现在data里引入相对路径
2022/06/05 Vue.js