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实现测试磁盘性能的方法
Mar 12 Python
python爬虫之百度API调用方法
Jun 11 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python底层封装实现方法详解
Jan 22 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
对Keras自带Loss Function的深入研究
May 25 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
laravel model 两表联查示例
2019/10/24 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
工厂门卫岗位职责
2013/11/25 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
纪检监察建议书
2014/05/19 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
工作自我评价范文
2019/03/21 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python