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处理PDF及生成多层PDF实例代码
Apr 24 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
新手常见6种的python报错及解决方法
Mar 09 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
Python包和模块的分发详细介绍
Jun 19 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
Python中threading库实现线程锁与释放锁
May 17 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
用vue写一个日历
2020/11/02 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python实现简单的四则运算计算器
2016/11/02 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Python编程之序列操作实例详解
2017/07/22 Python
python样条插值的实现代码
2018/12/17 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
实习鉴定范文
2013/12/19 职场文书
高中生期末评语大全
2014/01/28 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
运动会宣传口号
2014/06/09 职场文书
检讨书范文
2015/01/27 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
python中print格式化输出的问题
2021/04/16 Python