np.where()使用详解

简介: 1.函数介绍np.where函数相当于三元表达式的向量版本,能够针对向量作三元操作,有两种使用方法。np.where(condition, x, y):当满足第一个参数条件时,where返回x,不满足第一个参数的条件时返回y。

1.函数介绍

np.where函数相当于三元表达式的向量版本,能够针对向量作三元操作,有两种使用方法。

  1. np.where(condition, x, y):当满足第一个参数条件时,where返回x,不满足第一个参数的条件时返回y。

 2.np.where(condition):只有condition,没有x,y则输出满足条件的坐标(下标),以元组的形式返回。

2. np.where(condition, x, y)

(1)示例:

x,y为两个标量。

# 创建0-9的一维数组
a = np.arange(10)
b = np.where(a > 3, 0, 1)
print(a)
print(b)
# 结果
[0 1 2 3 4 5 6 7 8 9]
[1 1 1 1 0 0 0 0 0 0]

a>3,满足条件,把相应位置换为0;不满足条件,把相应位置换为1

(2)示例:

x,y为两个数组。

a = np.array([1, 3, 5, 7, 9])
b = np.array([2, 4, 6, 8, 10])
condition = np.array([True, False, False, True, True])
result = np.where(condition, a, b)
print(result)
# 结果
[1 4 6 7 9]

可以看出,布尔值为Ture时,返回a数组的值;为False时,返回b数组的值。

(3)示例

x,y为一个标量一个数组。

# 将小于0的换成2
a = np.array( [-1, 3, -5, 7, -9] )
result = np.where(a < 0, 2, a)
print(result)
# 结果
[-1  3 -5  7 -9]
[2 3 2 7 2]

(4) 示例

官网上的例子

 # 官网上的例子
a = np.where([[True, False], [True, True]], 
             [[1, 2], [3, 4]], 
             [[9, 8], [7, 6]])
print(a)
# 结果
[[1 8]
 [3 4]]

上面这个例子的条件为[[True,False], [True,True]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。

3.np.where(condition)

返回的是符合条件的坐标,这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

(1)示例

一维数组

a = np.arange(10)
b = np.where(a > 7)
print(f'a = {a}')
print(f'b = {b}')
a = [0 1 2 3 4 5 6 7 8 9]
b = (array([8, 9], dtype=int64),)

返回的是数组的下标,大于7的只有8,9

(2) 示例

二维数组

a = np.random.randn(3, 3)
print(f'a = {a}')
b = np.where(a > 0)
print(f'b = {b}')
a = [[-0.87715562  0.75345355 -2.14373533]
 [ 0.36962462 -0.3567048  -0.38734703]
 [-0.20589702  0.00343925 -0.79235428]]
b = (array([0, 1, 2], dtype=int64), array([1, 0, 1], dtype=int64))

返回的是下标,第一个元组的x,第二个元组是y。

以上就是np.where的详细内容。如果有问题,欢迎在评论区讨论。

目录
相关文章
|
存储 数据可视化 数据挖掘
随机漫步理论--python手把手讲解
随机漫步理论最初由Karl Pearson于1905年提出,它描述的是一种随机过程,其中每一步都是随机的,没有明确的方向。这个理论在自然科学、社会科学和工程领域都有广泛的应用。一个著名的例子是花粉在水滴表面的运动,它的路径可以被模拟为随机漫步模型。
458 21
成功解决A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,co
成功解决A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,co
|
Python
【金融量化】通道突破策略之布林带策略(Bollinger Band )、肯特纳通道策略(Keltner Channel)、唐奇安通道策略(Donchian)原理简介
本文介绍了三种金融量化分析中的通道突破策略:布林带策略(Bollinger Band)、肯特纳通道策略(Keltner Channel)和唐奇安通道策略(Donchian Channel),并提供了每种策略的原理和Python实现代码。
1384 2
|
PyTorch 算法框架/工具
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
2826 0
Pytorch中Trying to backward through the graph和one of the variables needed for gradient错误解决方案
|
数据处理 算法框架/工具 计算机视觉
手把手教你使用YOLOV5训练自己的目标检测模型
本教程由肆十二(dejahu)撰写,详细介绍了如何使用YOLOV5训练口罩检测模型,涵盖环境配置、数据标注、模型训练、评估与使用等环节,适合大作业及毕业设计参考。提供B站视频、CSDN博客及代码资源链接,便于学习实践。
5670 1
手把手教你使用YOLOV5训练自己的目标检测模型
|
机器学习/深度学习 人工智能 编解码
深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
【9月更文挑战第2天】深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
 深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
|
数据采集 数据挖掘 索引
pandas数据分析之数据运算(逻辑运算、算术运算、统计运算、自定义运算)
数据分析离不开数据运算,在介绍完pandas的数据加载、排序和排名、数据清洗之后,本文通过实例来介绍pandas的常用数据运算,包括逻辑运算、算术运算、统计运算及自定义运算。
932 0
|
搜索推荐 Linux iOS开发
打造个人听书神器:使用pyttsx3实现文字转语音
在这个信息时代,利用Python的pyttsx3库,可以轻松将文字转化为语音,制作个人听书工具。本文介绍pyttsx3的安装与使用,以及如何通过编程实现小说文本的语音化,提供个性化阅读体验。
1094 0
|
Java 索引
Java系列 之 Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
这篇文章介绍了Java中数组复制的四种方法:`Arrays.copyOf()`、`Arrays.copyOfRange()`、`System.arraycopy()`和`clone()`方法,以及它们的使用场景和示例代码。
|
域名解析 网络协议 算法