Numpy中的数组搜索中np.where方法详细介绍

作者:Henrywz 时间:2022-08-31 22:09:40 

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方法到这里就结束啦

来源:https://blog.csdn.net/Henryw1107/article/details/111672065

标签:Numpy,np.where
0
投稿

猜你喜欢

  • Go语言学习教程之声明语法(译)

    2024-02-01 03:44:16
  • 用Go写一个轻量级的ssh批量操作工具的方法

    2024-05-21 10:28:04
  • 网站浏览器兼容的底线

    2007-12-22 11:26:00
  • 详解用selenium来下载小姐姐图片并保存

    2023-08-11 02:02:31
  • 浅谈Mysql tinyint(1)与tinyint(4)的区别

    2024-01-14 10:10:39
  • 解决pycharm安装第三方库失败的问题

    2023-07-13 19:32:12
  • Python实现检测文件的MD5值来查找重复文件案例

    2021-08-14 01:28:02
  • python replace 空格数据处理的实现

    2022-12-24 04:33:44
  • python字典与json转换的方法总结

    2022-10-20 07:58:56
  • python3.7添加dlib模块的方法

    2023-09-16 03:58:55
  • 检测远程文件是否存在

    2009-06-22 13:00:00
  • XML编程实例:用ASP+XML打造留言本

    2008-05-04 13:37:00
  • python正则表达式实现自动化编程

    2022-01-08 12:24:33
  • 为ckeditor编辑器加上传图片的功能

    2022-08-11 22:17:50
  • JavaScript实现获取最近7天的日期的方法详解

    2024-04-27 15:20:59
  • Django ValuesQuerySet转json方式

    2021-12-05 07:15:34
  • Python利用VideoCapture读取视频或摄像头并进行保存

    2022-12-06 18:26:27
  • Python如何一行输入多个数,并存入列表

    2023-09-27 19:14:56
  • python break和continue用法对比

    2021-11-03 14:36:20
  • 对python插入数据库和生成插入sql的示例讲解

    2022-03-10 05:46:40
  • asp之家 网络编程 m.aspxhome.com