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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python基础之函数用法实例详解
Sep 10 Python
python获取本机mac地址和ip地址的方法
Apr 29 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
PyTorch学习笔记之回归实战
May 28 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
Java byte数组操纵方式代码实例解析
Jul 22 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
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
Linux中为php配置伪静态
2014/12/17 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
vuejs指令详解
2017/02/07 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
基于Python List的赋值方法
2018/06/23 Python
python计算两个数的百分比方法
2018/06/29 Python
python getpass模块用法及实例详解
2019/10/07 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
python制作抽奖程序代码详解
2021/01/15 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
保密承诺书范文
2014/03/27 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
老公给老婆的保证书
2014/04/28 职场文书
工程安全生产协议书
2014/11/21 职场文书
2014公司年终工作总结
2014/12/19 职场文书
2016年青少年禁毒宣传教育活动总结(学校)
2016/04/05 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android