Numpy中的数组搜索中np.where方法详细介绍
作者:Henrywz 发布时间:2022-08-31 22:09:40
标签:Numpy,np.where
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


猜你喜欢
- 在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态
- 如果中间红色区域是针则可以用下面的代码检测,其阈值和斑点检测的参数根据图像像素值做相应修改检测的主要思路是先通过找到外面的大圆,再通过圆心定
- 我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。1. 本节目标本节将讲解以 GitHu
- 1:php地址 http://127.0.0.6/?c=json2:java 输出的结果是[{"i
- 引言 在编写接口自动化测试脚本时,有时我们需要在代码中定
- TensorFlow训练网络有两种方式,一种是基于tensor(array),另外一种是迭代器两种方式区别是:第一种是要加载全部数据形成一个
- 1.读取CSV文件到Listdef readCSV2List(filePath): try: file=open(filePat
- 生成Fiboncci Fn数有Θ(1),Θ(n)甚至指数级的算法,不过有Θ(log n)的吗?告诉你,有。首先,关于Fibonacci数,有
- 首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①
- 缩进和SQL乱码及SQL包含变量1.在 PYCHARM 中只要 拉选块之后,按下tab键,整个块就会缩进,shift + tab
- 这里发现可以采用三种的变通方法将置为disabled的元素状态改为enabled。 第一种:改变disabled的boolean状态,具体代
- 前言最近学习了python,感觉挺多地方能用到它的。打包 测试 上传 爬电影....而且代码量是真少。人生苦短,我用python。而今天写的
- 有时候我们用的一些pdf资料是没有目录的,这样找寻我们想到的东西比较麻烦。本篇文章就为大家带来python来生成pdf目录书签的方法。首先,
- 利用python开发了一个提取sim.log 中的各个关键步骤中的时间并进行统计的程序:#!/usr/bin/python2.6import
- 1.首先需要安装pandas, 安装的时候可能由依赖的包需要安装,根据运行时候的提示,缺少哪个库,就pip 安装哪个库。2.示例代码impo
- 一直想着给框架添加邮件发送功能、所以整理下python下邮件发送功能首先python是支持邮件的发送、内置smtp库、支持发送纯文本、HTM
- 目录先通过一个实例来了解下接口到底解决什么问题。定义一个接口定义类,继承接口Python 抽象基类的介绍 (PEP3119)软件行业,唯一不
- 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated原因:MySQL 5.7.5和up实现了对功能依赖的检测。如果启用了only_full_group_by SQL模式(在默认情况下是这样),
- 本文实例总结了python中日期和时间格式化输出的方法。分享给大家供大家参考。具体分析如下:python格式化日期时间的函数为datetim
- 现象:有一个表 action_conf,数据如下:如果想获取以exp_site_10_开头的en_name的记录,sql语句该如何写?&nb