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中操作字典之setdefault()方法的使用
May 21 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
Python ftp上传文件
Feb 13 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
使用python3 实现插入数据到mysql
Mar 02 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
基于python实现操作git过程代码解析
Jul 27 Python
python爬虫框架feapde的使用简介
Apr 20 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+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
使用PHP开发留言板功能
2019/11/19 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
js 替换
2008/02/19 Javascript
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
js读取配置文件自写
2014/02/11 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
在JavaScript中call()与apply()区别
2016/01/22 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
如何在python中实现随机选择
2019/11/02 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
中国电视购物:快乐购
2017/02/04 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
汽车机电维修工求职信
2014/09/30 职场文书
研讨会致辞
2015/07/31 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫