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 Web框架Flask中使用七牛云存储实例
Feb 08 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
Python进程间通信Queue实例解析
Jan 25 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
python文件选择对话框的操作方法
Jun 27 Python
python中的反斜杠问题深入讲解
Aug 12 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 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
基于Zookeeper的使用详解
2013/05/02 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
JS表的模拟方法
2015/02/05 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
[01:58]2018DOTA2亚洲邀请赛趣味视频——交流
2018/04/03 DOTA
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
单利模式及python实现方式详解
2018/03/20 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
财务部经理岗位职责
2014/02/03 职场文书
建筑工地宣传标语
2014/06/18 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python