小能豆

替换 NumPy 数组中大于某个值的所有元素

javascript

我有一个 2D NumPy 数组。如何用值替换其中所有大于阈值T = 255的值x = 255?一种基于 for 循环的慢速方法是:

# 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

阅读 39

收藏
2024-09-15

共1个答案

小能豆

我认为最快和最简洁的方法是使用 NumPy 内置的 Fancy 索引。如果您有一个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
2024-09-15