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的另外几种语言实现
Jan 29 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
python3 读写文件换行符的方法
Apr 09 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
python标准库os库的函数介绍
Feb 12 Python
python删除某个目录文件夹的方法
May 26 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
python 如何获取页面所有a标签下href的值
May 06 Python
python四种出行路线规划的实现
Jun 23 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
杏林同学录(九)
2006/10/09 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
微信小程序实现底部导航
2018/11/05 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
django中模板的html自动转意方法
2018/05/27 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
numpy返回array中元素的index方法
2018/06/27 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python入门之井字棋小游戏
2020/03/05 Python
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
企业总经理助理岗位职责
2014/09/12 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
实习科室评语
2015/01/04 职场文书
财务年终工作总结大全
2019/06/20 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python