首页 > 解决方案 > 如何在计算差异之前包含列表的第一个元素

问题描述

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

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])

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

标签: pythonlistdictionaryhistogram

解决方案


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

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

这相当于手动将零插入数组(如果您的 numpy 版本较旧):

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

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

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

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

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

推荐阅读