NumPy数组中沿给定轴的一阶差分

Dic*_*man 10 python arrays numpy

#compute first differences of 1d array
from numpy import *

x = arange(10)
y = zeros(len(x))

for i in range(1,len(x)):
    y[i] = x[i] - x[i-1]
print y
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但必须至少有一种简单的pythonesque方法,而不必使用for循环.有什么建议?

Mar*_*cin 9

关于什么:

diff(x)
# array([1, 1, 1, 1, 1, 1, 1, 1, 1])
Run Code Online (Sandbox Code Playgroud)


AFo*_*lia 5

是的,这正是为那种循环numpy元素操作而设计的.您只需要学会采用正确的数组切片.

x = numpy.arange(10)
y = numpy.zeros(x.shape)

y[1:] = x[1:] - x[:-1]

print y
Run Code Online (Sandbox Code Playgroud)


dou*_*oug 5

几个NumPy内置函数将完成这项工作 - 特别是diff,ediff1dgradient.

我怀疑ediff1d是OP中描述的特定演员的更好选择 - 与其他两个不同,ediff1d特别针对/局限于这个特定的用例 - 即沿着单个轴(或者一个轴)的一阶差异1D阵列).

>>> import numpy as NP
>>> x = NP.random.randint(1, 10, 10)
>>> x
  array([4, 6, 6, 8, 1, 2, 1, 1, 5, 4])

>>> NP.ediff1d(x)
  array([ 2,  0,  2, -7,  1, -1,  0,  4, -1])
Run Code Online (Sandbox Code Playgroud)