向numpy数组添加噪声的最快方法

FiR*_*iTi 2 python numpy numpy-random

我有一个表示图像的numpy.ndarray,我想给它添加随机噪声。我已经进行了一些测试,到目前为止,我要做的最快的解决方案是:

def RandomNoise(x):
    x += np.random.random(x.shape)
Run Code Online (Sandbox Code Playgroud)

但是,当我有大图像/阵列时,此解决方案仍然太慢。最快的方法是什么?

Joh*_*nck 5

使此速度更快的最简单方法是避免分配您实际上不需要的随机数组。为避免这种情况,请使用Numba:

import numba
import random

@numba.njit
def RandomNoise2(x):
    x = x.reshape(-1) # flat view
    for ii in range(len(x)):
        x[ii] += random.random()
Run Code Online (Sandbox Code Playgroud)

对于中等大小的数组(例如400万个元素),它在JIT编译代码时第一次运行后会稍快一些。对于2千万个值的大型数组,速度是它的两倍甚至更多。如果您的内存不足,它将大大提高速度,因为它将避免交换。