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中bisect模块用法实例
Sep 25 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
python机器学习之决策树分类详解
Dec 20 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
May 11 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php通用防注入程序 推荐
2011/02/26 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
详解php命令注入攻击
2019/04/06 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
Extjs中通过Tree加载右侧TabPanel具体实现
2013/05/05 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
2017/03/14 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
python的unittest测试类代码实例
2017/12/07 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python中class的定义及使用教程
2019/09/18 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Python猜数字算法题详解
2020/03/01 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Python内存映射文件读写方式
2020/04/24 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
查摆问题对照检查材料
2014/08/28 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS