Numpy 寻找连续元素之间差异的矢量化方法?可能是np.diff()的变体?

Numpy 寻找连续元素之间差异的矢量化方法?可能是np.diff()的变体?,numpy,math,statistics,Numpy,Math,Statistics,我想找出数组中连续元素的两种类型的差异。 其中一项是: 差异1=[x1-x0,x2-x1,x3-x2,…] 这一点,我能够使用numpy库中的np.diff()函数实现。然而,我想要的另一种差异是: diff2=[x0-x1,x1-x2,x2-x3,…] 我可以使用for循环实现这一点,但是,数组的大小相当大。这有矢量化的函数吗 此外,我不确定这些差异在统计中被称为什么?或者如果有这样一个操作的术语。由于不确定这种操作叫什么,我无法在互联网上查找解决方案 如果您正在r中寻找解决方案(正如您在问题

我想找出数组中连续元素的两种类型的差异。 其中一项是:

差异1=[x1-x0,x2-x1,x3-x2,…]

这一点,我能够使用numpy库中的np.diff()函数实现。然而,我想要的另一种差异是:

diff2=[x0-x1,x1-x2,x2-x3,…]

我可以使用for循环实现这一点,但是,数组的大小相当大。这有矢量化的函数吗


此外,我不确定这些差异在统计中被称为什么?或者如果有这样一个操作的术语。由于不确定这种操作叫什么,我无法在互联网上查找解决方案

如果您正在
r
中寻找解决方案(正如您在问题中标记的那样),您可以从
dplyr
软件包中使用
lag
/
lead
功能

在这里,为了说明这一点,我创建了一个伪向量,将其转换为data.frame以用于
dplyr
,然后函数
mutate
使用相应的函数创建一个新列:

set.seed(123)
df%突变(Diff1=A-滞后(A),Diff2=A-超前(A))
A Diff1 Diff2
1 3 NA 0
2   3     0    -7
3  10     7     8
4   2    -8    -4
5   6     4     1
6   5    -1     1
7   4    -1    -2
8   6     2    -3
9   9     3    -1
10101NA

它是否回答了您的问题?

如果您正在
r
中寻找解决方案(当您在问题中标记它时),您可以使用
lag
/
lead
功能从
dplyr
软件包中获得

在这里,为了说明这一点,我创建了一个伪向量,将其转换为data.frame以用于
dplyr
,然后函数
mutate
使用相应的函数创建一个新列:

set.seed(123)
df%突变(Diff1=A-滞后(A),Diff2=A-超前(A))
A Diff1 Diff2
1 3 NA 0
2   3     0    -7
3  10     7     8
4   2    -8    -4
5   6     4     1
6   5    -1     1
7   4    -1    -2
8   6     2    -3
9   9     3    -1
10101NA

它能回答你的问题吗?

使用@thelatemail和@r2evans建议的
diff
,这很简单。但是,另一种选择是使用
头部
尾部

diff1 <- tail(x, -1) - head(x, -1)
diff1
#[1]  7 -8  6 -2  3 -8  6 -2 -1

diff2 <- head(x, -1) - tail(x, -1)
diff2
#[1] -7  8 -6  2 -3  8 -6  2  1

diff1使用@thelatemail和@r2evans建议的
diff
,非常简单。但是,另一种选择是使用
头部
尾部

diff1 <- tail(x, -1) - head(x, -1)
diff1
#[1]  7 -8  6 -2  3 -8  6 -2 -1

diff2 <- head(x, -1) - tail(x, -1)
diff2
#[1] -7  8 -6  2 -3  8 -6  2  1
@Divakar的评论:

diff2将是简单的-np.diff(a)或更有效的[:-1]-a[1:] 数组中包含一个

是我一直在寻找的完美解决方案。

@Divakar评论:

diff2将是简单的-np.diff(a)或更有效的[:-1]-a[1:] 数组中包含一个


是我正在寻找的完美解决方案。

看看
?diff
正如最近的邮件所说,使用
diff
命令。然后,
diff2您应该能够只做数学运算。下面是一个使用向量的示例<代码>xAhhh,您刚刚删除了标记。。。是的,标签不正确确实会使谈话偏离正确的方向。您正在为
diff2
?@DevanshiSukhija
diff2
寻找一个只使用python的解决方案,它将是
-np.diff(a)
或更高效的
a[:-1]-a[1://code>,其中
a
作为数组。请查看
?diff
,正如最近的邮件所述,使用
diff
命令。然后,
diff2您应该能够只做数学运算。下面是一个使用向量的示例<代码>xAhhh,您刚刚删除了标记。。。是的,标签不正确确实会使谈话偏离正确的方向。您正在为
diff2
寻找一个只使用python的解决方案?@DevanshiSukhija
diff2
将是
-np.diff(a)
或更高效的
a[:-1]-a[1://code>和
a
作为数组。