【问题标题】:Numpy difference between neighboring elements相邻元素之间的 Numpy 差异
【发布时间】:2012-06-21 04:37:37
【问题描述】:

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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    diff方法:

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

    返回

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

    【讨论】:

    • 另外,如果您不知道 np.diff,您可以将其矢量化为 a[1:] - a[:-1]
    • @ecatmur - 好点。无论如何,diff 也适用于 python 列表。 a[1:] - a[:-1] 仅适用于 numpy 数组。
    • 结果大小略有不同:在问题b中与a的长度相同。不过问题不大。
    • np.diff 的结果短了一个元素。如果你愿意,你可以在前面加上一个零。
    • 请注意np.diff(a) 可能比a[1:]-a[:-1] 慢。
    【解决方案2】:

    因为他说

    #在我的例子中是 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)
    

    【讨论】: