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中encode()方法的使用简介
May 18 Python
一张图带我们入门Python基础教程
Feb 05 Python
python模拟事件触发机制详解
Jan 19 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
Python request使用方法及问题总结
Apr 26 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php UBB 解析实现代码
2011/11/27 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
Angular4.0动画操作实例详解
2019/05/10 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
详解Python装饰器
2019/03/25 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python PIL模块的基本使用
2020/09/29 Python
精选干货:Java精选笔试题附答案
2014/01/18 面试题
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
2014年变电站工作总结
2014/12/19 职场文书
团委工作总结2015
2015/04/02 职场文书