0. 基本用法
np.where(condition, [X, Y])
>>> np.where([[True, False], [True, True]],
... [[1, 2], [3, 4]],
... [[9, 8], [7, 6]])
array([[1, 8],
[3, 4]])
- condition, X, Y:要求 shape 相同,如有必要,会进行 broadcast
- 如果对应位置 condition 中为 True,则选择 X 中对应位置上的元素;如果为 False,选择的是 Y 中对应位置上的元素;
- condition, X, Y:三个参数齐全的话,返回的是如上所说的对应位置的元素;否则返回的是 condition 为 True 时的索引;
1. 最大最小截断
图像处理中,对图像矩阵经历一系列的处理之后,常常会有一些像素值出现小于 0 或大于 255 的情况,显然是不符合 8 位深的要求的,此时我们就需做如下截断处理:
I[I > 255] = 255;
I[I < 0] = 0;
当然我们也可以使用 where 语句:
I = np.where(np.where(I > 255, 255, I) < 0, 0, I);
2. 返回索引
- 2D array:
i, j = np.where(a == value)
- 1D array:
i, = np.where(a == value)