numpy中where()

np.where()是NumPy库中一个非常有用的函数,它根据给定条件从一个数组中筛选元素。

函数语法:

np.where(condition[, x, y])

参数解释:

  • condition是一个布尔数组或布尔表达式,用于判断对应元素的真值条件。
  • xy是可选参数,需要与condition输出的布尔数组的形状相同。

返回值:

        一个元组,其中第一个元素是conditionTrue的元素在输入数组中的索引;如果提供了xy,第二个元素是输出数组,由xy根据condition进行选择组成。

例子:

import numpy as np

a = np.arange(10, 20)

# 1. 找出大于5的元素
print(np.where(a > 15))
# 输出: (array([6, 7, 8, 9]),)

 注意这里返回的是坐标.也就是说,当where()只传入一个参数时,返回的是符合条件的坐标。

a = np.arange(10)

# 2. 将大于5的元素赋值为10,小于等于5的赋值为a的原值
b = np.where(a > 5, 10, a)
print(b)
# 输出: [ 0  1  2  3  4  5 10 10 10 10]

# 3. 找出非0元素的坐标
c = np.array([5, 0, 8, 0, 0, 9])
print(np.where(c != 0))
# 输出: (array([0, 2, 5]),)

注意:b = np.where(a > 5, 10, a)这行代码中:

  1. a > 5是一个条件表达式,它会对数组a中的每个元素进行判断,如果元素值大于5,则该位置的结果为True,否则为False。最终它会返回一个与a大小相同的布尔数组。

  2. 10是当条件为True时,输出数组中该位置应该赋予的值。

  3. a是当条件为False时,输出数组中该位置应该赋予的值。

换句话说,np.where(条件, x, y)的工作流程是:

  1. 首先根据条件计算出一个布尔数组
  2. 然后根据这个布尔数组,从xy中"挑拣"值,生成一个新的数组
    ①当布尔数组中某个位置为True时,就从x取值赋值给新数组的该位置
    ②当布尔数组中某个位置为False时,就从y取值赋值给新数组的该位置

所以在b = np.where(a > 5, 10, a)这个例子中:

  • 对于a中大于5的元素,新数组b中的对应位置会被赋值为10
  • 对于a中小于等于5的元素,新数组b中的对应位置会被赋予a中相同位置的原始值

        因此,最终输出的b是一个新的数组,它是根据a中元素的值,用10替换了大于5的元素,其余元素保持原值。

在where()内只有一个参数时返回坐标,三个时返回修改值

np.where()的这种根据条件从两个数组/值中进行选择赋值的操作,在数据处理中非常常见和有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>