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实现的简单猜数字游戏
Apr 04 Python
python中随机函数random用法实例
Apr 30 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
对Python3中的print函数以及与python2的对比分析
May 02 Python
Python基础教程之异常详解
Jan 10 Python
python打包exe开机自动启动的实例(windows)
Jun 28 Python
如何理解python面向对象编程
Jun 01 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
python opencv通过4坐标剪裁图片
Jun 05 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中的日期及时间
2006/11/23 PHP
使用adodb lite解决问题
2006/12/31 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
jQuery 树形结构的选择器
2010/02/15 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
请解释接口的显式实现有什么意义
2012/05/26 面试题
shell变量的作用空间是什么
2013/08/17 面试题
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
销售团队获奖感言
2014/08/14 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
协议书范文
2015/01/27 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书