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登录QQ邮箱发信的实现代码
Feb 10 Python
Python 字典dict使用介绍
Nov 30 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
python实现求特征选择的信息增益
Dec 18 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
python 日期排序的实例代码
Jul 11 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
基于python调用jenkins-cli实现快速发布
Aug 14 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
JAVA/JSP学习系列之七
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
ThinkPHP框架里隐藏index.php
2016/04/12 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
jquery遍历标签中自定义的属性方法
2016/09/17 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
基于python编写的微博应用
2014/10/17 Python
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
详解Anaconda 的安装教程
2020/09/23 Python
优秀社区干部事迹材料
2014/02/03 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript