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 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
Python之re操作方法(详解)
Jun 14 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
如何基于python实现画不同品种的樱花树
Jan 03 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
Django REST framework 限流功能的使用
Jun 24 Python
python内置模块之上下文管理contextlib
Jun 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP中的加密功能
2006/10/09 PHP
PHP 中dirname(_file_)讲解
2007/03/18 PHP
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
基于node实现websocket协议
2016/04/25 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
详解vue v-model
2020/08/31 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
Python标准库之Sys模块使用详解
2015/05/23 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
Python 在函数上添加包装器
2020/07/28 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
合作协议书
2014/04/23 职场文书
工程承诺书怎么写
2014/05/24 职场文书
2014年生产部工作总结
2014/12/17 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL