np.where()是NumPy库中一个非常有用的函数,它根据给定条件从一个数组中筛选元素。
函数语法:
np.where(condition[, x, y])参数解释:
condition是一个布尔数组或布尔表达式,用于判断对应元素的真值条件。x和y是可选参数,需要与condition输出的布尔数组的形状相同。返回值:
一个元组,其中第一个元素是
condition为True的元素在输入数组中的索引;如果提供了x和y,第二个元素是输出数组,由x和y根据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)这行代码中:
a > 5是一个条件表达式,它会对数组a中的每个元素进行判断,如果元素值大于5,则该位置的结果为True,否则为False。最终它会返回一个与a大小相同的布尔数组。
10是当条件为True时,输出数组中该位置应该赋予的值。
a是当条件为False时,输出数组中该位置应该赋予的值。换句话说,
np.where(条件, x, y)的工作流程是:
- 首先根据
条件计算出一个布尔数组- 然后根据这个布尔数组,从
x和y中"挑拣"值,生成一个新的数组
①当布尔数组中某个位置为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()的这种根据条件从两个数组/值中进行选择赋值的操作,在数据处理中非常常见和有用。
2300

被折叠的 条评论
为什么被折叠?



