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 08 Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
python轻松查到删除自己的微信好友
Jan 10 Python
Scrapy的简单使用教程
Oct 24 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
Python 从列表中取值和取索引的方法
Dec 25 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
python的time模块和datetime模块实例解析
Nov 29 Python
python简单的三元一次方程求解实例
Apr 02 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
Python异常处理机制结构实例解析
Jul 23 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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
第一个无线电台是由谁发明的
2021/03/01 无线电
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php抽象类用法实例分析
2015/07/07 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
python框架django基础指南
2016/09/08 Python
Python中元组,列表,字典的区别
2017/05/21 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
python多线程同步之文件读写控制
2021/02/25 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
毕业生简单求职信
2013/11/19 职场文书
2014年母亲节寄语
2014/05/07 职场文书
安全生产演讲稿
2014/05/09 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
创业计划书之电动车企业
2019/10/11 职场文书