介绍
根据条件返回元素
第一种用法
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
