Numpy中的数组搜索中np.where方法详细介绍


Posted in Python onJanuary 08, 2021

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中有三个数组。

补充

np.where和np.searchsorted同属于Numpy数组搜索的一部分,这里先介绍简单的where

import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.where(a == 5)

print(b)

where方法将会返回一个元祖

(array([4]),)

此外还将介绍一个搜索奇数和偶数的方法(数组全都默认使用最上面的a数组)

可见,简单的判断余数即可

c = np.where(a%2 == 0)
print(c)

d = np.where(a%2 == 1)
print(d)

返回:

(array([1, 3]),)
(array([0, 2, 4]),)

关于np.where方法到这里就结束啦

到此这篇关于Numpy中的数组搜索中np.where方法详细介绍的文章就介绍到这了,更多相关Numpy np.where 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
python config文件的读写操作示例
Sep 27 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python实现自动签到脚本功能
Aug 20 Python
python 窃取摄像头照片的实现示例
Jan 08 #Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 #Python
Opencv+Python识别PCB板图片的步骤
Jan 07 #Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 #Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 #Python
Django权限控制的使用
Jan 07 #Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 #Python
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
js时间控件只显示年月
2017/01/08 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
javascript实现日历效果
2019/06/17 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
python实现图片九宫格分割
2021/03/07 Python
jupyter notebook 重装教程
2020/04/16 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
学习决心书
2014/03/11 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
学校文明单位申报材料
2014/05/06 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
高三生物教学反思
2016/02/22 职场文书
golang中的并发和并行
2021/05/08 Golang
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android