Numpy clip 函数花费的时间是预期的两倍

Numpy clip function takes twice as long as expected

我发现 numpy 剪辑功能的性能比自己使用蒙版执行它要慢得多(164us 对大约 74us)。 clip 函数是否做了一些额外的事情,使它花费了两倍的时间?

%timeit growth.clip(-maxg, maxg)
10000 loops, best of 3: 164 µs per loop

%timeit growth[np.greater(growth,maxg)] = maxg
10000 loops, best of 3: 37.1 µs per loop

%timeit growth[np.less(growth,-maxg)] = -maxg
10000 loops, best of 3: 37 µs per loop

重置生长数组并以相反顺序测试后:

%timeit growth[np.less(growth,-maxg)] = -maxg
10000 loops, best of 3: 36.6 µs per loop

%timeit growth[np.greater(growth,maxg)] = maxg
10000 loops, best of 3: 37.3 µs per loop

%timeit growth.clip(-maxg, maxg)
100 loops, best of 3: 150 µs per loop

请注意,增长是一个相当大的数组:

growth.shape
(12964, 7)

默认 numpy.clip returns 一个包含裁剪值的新数组。使用参数 out=growth 就地进行操作:

growth.clip(-maxg, maxg, out=growth)

这样,clip 所花费的时间与您提到的替代方案更相似。