np.where()
numpy.where(condition[, x, y])
参数:
condition:array_like, bool,如果为True,则产生x,否则产生y
x, y:array_like,从中选择的值
numpy.where() 有两种用法:
1. np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
import numpy as np 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])
2. np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标(比如x,y,z分别作为一个元祖)。
a = np.arange(27).reshape(3,3,3) ''' 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],
dtype=int64),
array([2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2],
dtype=int64),
array([0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2],
dtype=int64))
np.where会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组
https://numpy.org/doc/stable/reference/generated/numpy.where.html