Python中where()函数的用法

本文详细介绍了numpy中的where()函数的使用方法,包括一维和二维数组情况下的索引返回方式,以及如何根据条件选择返回不同数组中的值。通过实例演示了where()函数在数组操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

where()的用法

首先强调一下,where()函数对于不同的输入,返回的只是不同的。

1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组

2当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置

例如

 1 >>>b=np.arange(10)
 2 >>>b
 3 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 4 >>>np.where(b>5)
 5  (array([6, 7, 8, 9], dtype=int64),)
 6 
 7 >>>a=np.reshape(np.arange(20),(4,5))
 8 >>>a 
 9 array([[ 0,  1,  2,  3,  4],
10        [ 5,  6,  7,  8,  9],
11        [10, 11, 12, 13, 14],
12        [15, 16, 17, 18, 19]])
13 >>>np.where(a>10)
14 (array([2, 2, 2, 2, 3, 3, 3, 3, 3], dtype=int64),
15  array([1, 2, 3, 4, 0, 1, 2, 3, 4], dtype=int64))

 对numpy标准库里的解释做一个介绍:

numpy.where(condition[, xy])

基于条件condition,返回值来自x或者y.

如果.

参数:

condition : 数组,bool值

When True, yield x, otherwise yield y.

x, y : array_like, 可选

x与y的shape要相同,当condition中的值是true时返回x对应位置的值,false是返回y的

返回值:

out : ndarray or tuple of ndarrays

①如果参数有condition,x和y,它们三个参数的shape是相同的。那么,当condition中的值是true时返回x对应位置的值,false是返回y的。

②如果参数只有condition的话,返回值是condition中元素值为true的位置索引,切是以元组形式返回,元组的元素是ndarray数组,表示位置的索引

 
>>> np.where([[True, False], [True, True]],
...          [[1, 2], [3, 4]],
...          [[9, 8], [7, 6]])
array([[1, 8],
       [3, 4]])
>>>
>>> np.where([[0, 1], [1, 0]])
(array([0, 1]), array([1, 0]))
>>>
>>> x = np.arange(9.).reshape(3, 3)
>>> np.where( x > 5 )
(array([2, 2, 2]), array([0, 1, 2]))
>>> x[np.where( x > 3.0 )]               # Note: result is 1D.
array([ 4.,  5.,  6.,  7.,  8.])
>>> np.where(x < 5, x, -1)               # Note: broadcasting.
array([[ 0.,  1.,  2.],
       [ 3.,  4., -1.],
       [-1., -1., -1.]])
Find the indices of elements of x that are in goodvalues.

>>>
>>> goodvalues = [3, 4, 7]
>>> ix = np.in1d(x.ravel(), goodvalues).reshape(x.shape)
>>> ix
array([[False, False, False],
       [ True,  True, False],
       [False,  True, False]], dtype=bool)
>>> np.where(ix)
(array([1, 1, 2]), array([0, 1, 1]))

 

转载于:https://www.cnblogs.com/zz22--/p/8654395.html

<think>好的,我需要帮助用户了解如何在Python中使用NumPy的where函数。首先,我得回忆一下自己之前学过的关于NumPy的知识,尤其是where函数用法。记得where函数主要用于根据条件选择数组中的元素,可以返回符合条件的元素的索引或者替换值。 用户提供的引用内容中有几个相关的部分,比如引用[3]提到where函数用于根据条件选择元素,返回符合条件的元素或索引,适用于替换数组中的值、筛选数据等。引用[4]和引用[5]则给出了一些示例,比如使用数组arr = np.array([1,2,3,4,5]),以及argmax和argmin的例子,但可能需要结合到where函数的应用场景中。 首先,我应该介绍where函数的基本语法:np.where(condition, [x, y])。当只传入condition时,返回满足条件的元素的索引;当传入condition、x、y时,根据条件选择x或y的值。需要分情况说明,并举例子。 接下来,根据用户提供的示例,比如引用[4]中的示例一是索引筛选,可能是指使用where函数获取满足条件的元素的索引。然后,用户可能还需要替换值的例子,比如将满足条件的元素替换为一个值,不满足的替换为另一个值。 需要注意的是,引用的内容中有些是关于fromfunction、repeat、argmax/argmin等,但用户的问题集中在where函数,所以需要集中讨论where用法,但可能需要适当关联其他函数,如果有必要的话。不过根据用户的问题,主要关注where,所以其他函数可能暂时不需要深入。 然后,我需要按照用户的要求,生成相关问题。问题应该与where函数相关,比如应用场景、与其他函数的比较、多维数组处理、性能优化等。 在整理回答结构时,应该分步骤说明,比如基本用法、返回索引、条件替换、多维数组处理等。每个部分都应有示例代码,并参考用户提供的引用内容中的例子,比如引用[4]中的arr数组,可以用于示例中。同时,确保所有的数学表达式使用$...$格式,比如数组的索引等。 需要检查是否有遗漏的点,比如是否提到多维数组的情况,或者where函数在数据分析中的实际应用。同时,确保回答符合用户的要求:结构清晰,分步解决问题,真实可靠,并正确引用提供的参考内容。 最后,生成的相关问题需要与where函数紧密相关,帮助用户进一步深入学习。例如,where函数与逻辑运算符的结合使用,性能方面的考虑,或者在不同形状数组下的广播机制等。</think>### 如何使用 NumPy 的 `where` 函数 NumPy 的 `np.where` 函数是一个强大的条件筛选工具,可根据条件对数组元素进行**索引提取**或**值替换**。以下是具体用法和示例: --- #### 1. **基本语法** ```python numpy.where(condition, [x, y]) ``` - **仅传入 `condition`**:返回满足条件的元素索引(元组形式)[^3]。 - **传入 `condition, x, y`**:满足条件的元素替换为 `x`,否则替换为 `y`。 --- #### 2. **返回满足条件的索引** 当仅传入条件时,`where` 返回符合条件的元素索引。例如: ```python import numpy as np arr = np.array([1, 2, 3, 4, 5]) indices = np.where(arr > 3) print(indices) # 输出:(array([3, 4], dtype=int64),) ``` 这里返回索引 `3` 和 `4`,对应元素 `4` 和 `5`[^4]。 --- #### 3. **条件替换:根据条件修改值** 通过 `np.where(condition, x, y)` 可快速替换元素: ```python arr = np.array([1, 2, 3, 4, 5]) result = np.where(arr % 2 == 0, "偶数", "奇数") print(result) # 输出:['奇数' '偶数' '奇数' '偶数' '奇数'] ``` - 将偶数替换为 `"偶数"`,奇数替换为 `"奇数"`。 --- #### 4. **多维数组处理** `where` 函数同样适用于多维数组。例如,筛选矩阵中大于 3 的元素: ```python matrix = np.array([[2, 1, 3], [4, 5, 6]]) indices = np.where(matrix > 3) print(indices) # 输出:(array([1, 1, 1], dtype=int64), array([0, 1, 2], dtype=int64)) ``` 返回的索引对应位置为 `(1,0)`(值4)、`(1,1)`(值5)、`(1,2)`(值6)[^5]。 --- #### 5. **与其他函数结合使用** 例如,将 `where` 与 `argmax` 结合,找到最大值并替换: ```python arr = np.array([1, 5, 3, 4, 2]) max_index = arr.argmax() # 输出:1(对应值5) result = np.where(arr == arr.max(), "最大值", arr) print(result) # 输出:['1' '最大值' '3' '4' '2'] ``` 这里将最大值替换为字符串 `"最大值"`[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值