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使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
Python中的日期时间处理详解
Nov 17 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
python多进程实现文件下载传输功能
Jul 28 Python
python读取文本中的坐标方法
Oct 14 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
Django处理多用户类型的方法介绍
May 18 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
Python持续监听文件变化代码实例
Jul 22 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
用javascript获得地址栏参数的两种方法
2006/11/08 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
Python每天必学之bytes字节
2016/01/28 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python复制文件到指定目录的实例
2018/04/27 Python
Python识别html主要文本框过程解析
2020/02/18 Python
python求解汉诺塔游戏
2020/07/09 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
html5 input属性使用示例
2013/06/28 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
幼儿园户外活动总结
2014/07/04 职场文书
推荐信范文大全
2015/03/27 职场文书
听证会主持词
2015/07/03 职场文书
java泛型通配符详解
2021/07/25 Java/Android