如何在计算差异之前包含列表的第一个元素

how to include first element of a list before computing the difference

我正在创建直方图。我目前有这段代码:

g = [479, 481, 503, 525, 554, 586, 614, 669, 683]

然后我为 x 轴和 y 轴写了这个:

x =[28, 27, 26, 25, 24, 23, 22, 21, 20]
y = diff(g)

这是它计算 y 的结果:

array([  2,  22,  22,  29,  32,  28,  55,  14])

但是,我意识到我的直方图在开始计算从那里开始的差异之前不包括 479(g 中的第一个元素),这正是我希望做的。我想要的输出是

array([ 479, 2,  22,  22,  29,  32,  28,  55,  14])

有什么办法可以做到这一点吗?我不想手动附加它,因为我需要为各种文件自动添加它。

将元素添加到 diff 有两种主要方式:在事实之前或之后。如果你想在前面加上一个零,你可以使用从 v1.16.0 开始可用的 prepend 参数:

y = np.diff(g, prepend=0)

这相当于手动将一个零插入数组(以防您的 numpy 版本较旧):

y = np.diff(np.insert(g, 0, 0))

你可以在 diff 之后做一些非常相似的事情,方法是在开头插入 g[0]

y = np.insert(np.diff(g), 0, g[0])

但是,此处显示的所有选项都是低效的,因为它们会复制您的所有数据(g 或差异)。 space 高效的解决方案将分配一个输出缓冲区,并手动计算差异:

y = np.empty_like(g)
y[1:] = g[1:] - g[:-1]
y[0] = g[0]