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中如何获取类属性的列表
Dec 26 Python
python3+pyqt5+itchat微信定时发送消息的方法
Feb 20 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
python/golang 删除链表中的元素
Sep 14 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
Python爬虫基础初探selenium
May 31 Python
Python深度学习之实现卷积神经网络
Jun 05 Python
python中取整数的几种方法
Nov 07 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类Class的概念
2012/06/14 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jquery 实现返回顶部功能
2014/11/17 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Python 装饰器使用详解
2017/07/29 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
技术总监岗位职责
2013/12/05 职场文书
上班上网检讨书
2014/01/29 职场文书
松材线虫病防治方案
2014/06/15 职场文书
主婚人致辞精选
2015/07/28 职场文书
董事长开业致辞
2015/07/29 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers