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实现得到一个给定类的虚函数
Sep 28 Python
python发送HTTP请求的方法小结
Jul 08 Python
python实现红包裂变算法
Feb 16 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
Python如何对齐字符串
Jul 30 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
django学习之ajax post传参的2种格式实例
May 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
两个强悍的php 图像处理类1
2009/06/15 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
基于Python List的赋值方法
2018/06/23 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
应用数学自荐书范文
2013/11/24 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2014年班干部工作总结
2014/11/25 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS