numpy.where()

介绍

根据条件返回元素

第一种用法

np.where(condition)

输出满足条件 (condition) 的元素的坐标

一个条件,一维数组

返回大于103的元素的 索引

arr=np.array(range(100,110))
np.where(103<arr)

输出

(array([4, 5, 6, 7, 8, 9], dtype=int64),)

将大于103的元素组成一个新的数组

arr=np.array(range(100,110))
arr[np.where(103<arr)]

输出

array([104, 105, 106, 107, 108, 109])

根据条件修改值

将大于103的元素改为500

arr=np.array(range(100,110))
arr[np.where(103<arr)]=500
arr

输出

array([100, 101, 102, 103, 500, 500, 500, 500, 500, 500])

二个条件 “与”,一维数组

返回大于103,小于107的元素的索引

arr=np.array(range(100,110))
np.where((103<arr) & (arr<107))

输出

(array([4, 5, 6], dtype=int64),)

二个条件 “或”,一维数组

返回小于103,或者 大于107的元素的索引

arr=np.array(range(100,110))
np.where((arr<103) | (108<arr))

输出

(array([0, 1, 2, 9]),)

二个条件,一维数组,修改值

将大于103,小于107的元素改为500

arr=np.array(range(100,110))
arr[np.where((103<arr) & (arr<107))]=500
arr

输出

array([100, 101, 102, 103, 500, 500, 500, 107, 108, 109])

一个条件,二维数组 (难点)

返回大于10的元素的坐标

np.random.seed(49)
arr=np.random.randint(1,20,(2,3))
arr

输出数组

array([[11, 14,  9],
       [19, 13,  6]])

索引:

np.where(arr>10)

输出

(
    array([0, 0, 1, 1], dtype=int64),
    array([0, 1, 0, 1], dtype=int64)
)

解释:
第一个数组的元素,与第二个数组的元素,共同组成坐标,如下图:

坐标(0,0),是第1行第1列,即11
坐标(0,1),是第1行第3列,即14
坐标(1,0),是第2行第1列,即19
坐标(1,1),是第2行第2列,即13

第二种用法

np.where(condition, x, y)

满足条件(condition),输出x,不满足输出y

例子

arr = np.arange(10)
np.where(aa,1,-1)

输出

array([-1,  1,  1,  1,  1,  1,  1,  1,  1,  1])

解释:
0为False,非0为True,所以第一个是-1,后面是1


原文出处:/show_1EF4MQosMnOq.html