我有一个 2D NumPy 数组。如何用值替换其中所有大于阈值T = 255的值x = 255?一种基于 for 循环的慢速方法是:
T = 255
x = 255
# arr = arr.copy() # Optionally, do not modify original arr. for i in range(arr.shape[0]): for j in range(arr.shape[1]): if arr[i, j] > 255: arr[i, j] = x
我认为最快和最简洁的方法是使用 NumPy 内置的 Fancy 索引。如果您有一个ndarray命名的arr,则可以用>255值替换所有元素,x如下所示:
ndarray
arr
>255
x
arr[arr > 255] = x
我在我的计算机上用 500 x 500 的随机矩阵运行了这个程序,将所有 >0.5 的值替换为 5,平均花费 7.59 毫秒。
In [1]: import numpy as np In [2]: A = np.random.rand(500, 500) In [3]: timeit A[A > 0.5] = 5 100 loops, best of 3: 7.59 ms per loop