相邻元素之间的Numpy差异

25

我有一个纯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重写这些函数?

2个回答

41

有一个diff方法可以使用:

a = range(5) # python list of numpy array
np.diff(a)

返回

array([1, 1, 1, 1])

13
如果您不知道np.diff,您可以将其向量化为a[1:] - a [:-1] - ecatmur
2
@ecatmur - 很好的观点。无论如何,diff也适用于Python列表。只有在NumPy数组上才能使用a[1:] - a[:-1] - eumiro
结果的大小有轻微差异:在问题b中,与a相同长度。不过这并不是什么大问题。 - Juh_
3
np.diff 的结果比原数组少一个元素。如果需要,可以在前面添加一个零。 - eumiro
1
请注意,np.diff(a) 可能比 a[1:]-a[:-1] 更慢。 - hychou

3

因为他说

#在我的情况下,这是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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接