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