我有一个纯Python编写的计算相邻元素差值的算法:
a = range(1000000) #it's numpy array in my case
prev = a[0]
b = [0, ]
for i in a[1:]:
b.append(i - prev)
prev = i
有没有办法使用Numpy重写这些函数?
因为他说
#在我的情况下,这是numpy数组
你可能想使用a[1:]-a[:-1]
,因为它更快。
> %%timeit a=np.random.rand(10000)
> a[1:]-a[:-1]
6.94 µs ± 188 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
> %%timeit a=np.random.rand(10000)
> np.diff(a)
15.7 µs ± 247 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
np.diff
,您可以将其向量化为a[1:] - a [:-1]
。 - ecatmurdiff
也适用于Python列表。只有在NumPy数组上才能使用a[1:] - a[:-1]
。 - eumironp.diff
的结果比原数组少一个元素。如果需要,可以在前面添加一个零。 - eumironp.diff(a)
可能比a[1:]-a[:-1]
更慢。 - hychou