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中使用enumerate函数遍历元素实例
Jun 16 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
在双python下设置python3为默认的方法
Oct 31 Python
python树的同构学习笔记
Sep 14 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 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
关于页面优化和伪静态
2009/10/11 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
php模板原理讲解
2013/11/13 PHP
discuz目录文件资料汇总
2014/12/30 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
js Dialog 实践分享
2012/10/22 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python字典多条件排序方法实例
2014/06/30 Python
python遍历数组的方法小结
2015/04/30 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python中reader的next用法
2018/07/24 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
光盘行动倡议书
2014/02/02 职场文书
社团活动总结书
2014/06/27 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
用python自动生成日历
2021/04/24 Python
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电