首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数为numpy.diff的n=2产生奇怪的结果

参数为numpy.diff的n=2产生奇怪的结果
EN

Stack Overflow用户
提问于 2022-03-29 13:36:32
回答 2查看 191关注 0票数 3

我很难理解np.diff的行为当n>1

文档给出了以下示例:

代码语言:javascript
复制
x = np.array([1, 2, 4, 7, 0])
np.diff(x)
array([ 1,  2,  3, -7])
np.diff(x, n=2)
array([  1,   1, -10])

从第一个例子看,我们用前一个数字减去每个数字(xi+1-xi),所有结果都是有意义的。

第二次调用函数时,使用n=2,我们似乎正在执行xi+2-xi+1-xi,结果数组中的第一个数字(1和1)是有意义的,但我很惊讶最后一个数字不是-11 (0-7-4)而是-10。

在文档中我找到了这个解释

第一个差分是由outi = ai+1 - ai沿给定的轴给出的,更高的差是用递归差分法计算的。

我无法理解这个“递归”,所以如果有人有一个更清楚的解释,我会很高兴的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-29 13:46:51

np.diff(x, n=2)np.diff(np.diff(x))相同(在本例中,这就是“递归”的意思)。

票数 4
EN

Stack Overflow用户

发布于 2022-03-29 13:45:27

在本例中,“递归”仅仅意味着它要多次执行相同的操作,每次都是在上一步产生的数组上执行。所以:

代码语言:javascript
复制
x = np.array([1, 2, 4, 7, 0])
output = np.diff(x)

产生

代码语言:javascript
复制
output = [2-1, 4-2, 7-4, 0-7] = [1, 2, 3, -7]

如果使用n=2,它只需执行两次相同的操作:

代码语言:javascript
复制
output = np.diff(x, n=2)
# first step, you won't see this result
output = [2-1, 4-2, 7-4, 0-7] = [1, 2, 3, -7]
# and then again (this will be your actual output)
output = [2-1, 3-2, -7-3] = [1, 1, -10]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71663080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档