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中pygame的mouse鼠标事件用法实例
Nov 11 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
python绘制直线的方法
Jun 30 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Python 转换文本编码实现解析
Aug 27 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
浅析NumPy 切片和索引
Sep 02 Python
Python入门学习之类的相关知识总结
May 25 Python
变长双向rnn的正确使用姿势教学
May 31 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
关于文本留言本的分页代码
2006/10/09 PHP
PHP中的类型约束介绍
2015/05/11 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
jQuery 1.0.2
2006/10/11 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python 变量类型详解
2018/10/10 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
软件测试笔试题
2012/10/25 面试题
大学三年的自我评价
2013/12/25 职场文书
消防安全检查制度
2014/02/04 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
行政复议决定书
2015/06/24 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
电力培训学习心得体会
2016/01/11 职场文书
导游词之张家口
2019/12/13 职场文书