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 初始化多维数组代码
Sep 06 Python
用Python和MD5实现网站挂马检测程序
Mar 13 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
linux查找当前python解释器的位置方法
Feb 20 Python
记录Python脚本的运行日志的方法
Jun 05 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
python实现滑雪游戏
Feb 22 Python
Python flask路由间传递变量实例详解
Jun 03 Python
Python3.8安装Pygame教程步骤详解
Aug 14 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
js 单引号 传递方法
2009/06/22 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
jquery操作select大全
2014/04/25 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
Python  连接字符串(join %)
2008/09/06 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
列举Python中吸引人的一些特性
2015/04/09 Python
Python中正则表达式的详细教程
2015/04/30 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
static关键字的用法
2013/10/07 面试题
出生证明公证书
2014/04/09 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
广播体操口号
2014/06/18 职场文书
档案工作汇报材料
2014/08/21 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
实习介绍信范文
2015/05/05 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
Minikube搭建Kubernetes集群
2022/03/31 Servers