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



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

%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是一个相当大的数组:

growth.shape
(12964, 7)

默认的numpy.clip返回一个包含剪切值的新数组。使用参数out=growth使操作就位:

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

这样,clip所需的时间与您提到的替代方案更接近。

相关内容

最新更新