Python 列表或数组中每个索引处过去和将来的样本之和

Python 列表或数组中每个索引处过去和将来的样本之和,python,arrays,list,numpy,Python,Arrays,List,Numpy,我想知道是否有任何内置python模块来计算列表中每个索引的当前值、一个过去值和一个未来值的平均值。(如果过去的样品不可用,则仅使用未来的样品,反之亦然) 如果没有,有效的方法是什么 在指数a(i)中,我需要平均值(a(i-1)、a(i)、a(i+1)) 输入: [3, 5, 1, 6, 7] 我应该 [4, 3, 4, 4.6, 6.5] 提前感谢您可以使用列表理解,获得相应的片段和平均值 >>> a = [3, 5, 1, 6, 7] >>> [a[m

我想知道是否有任何内置python模块来计算列表中每个索引的当前值、一个过去值和一个未来值的平均值。(如果过去的样品不可用,则仅使用未来的样品,反之亦然)

如果没有,有效的方法是什么

在指数a(i)中,我需要平均值(a(i-1)、a(i)、a(i+1))

输入:

[3, 5, 1, 6, 7]
我应该

[4, 3, 4, 4.6, 6.5]

提前感谢

您可以使用列表理解,获得相应的片段和平均值

>>> a = [3, 5, 1, 6, 7]
>>> [a[max(0, i-1):i+2] for i in range(len(a))]
[[3, 5], [3, 5, 1], [5, 1, 6], [1, 6, 7], [6, 7]]
>>> [np.mean(a[max(0, i-1):i+2]) for i in range(len(a))]
[4.0, 3.0, 4.0, 4.666666666666667, 6.5]

(在这里使用
max(0,i-1)
,因为
[-1:2]
将是一个空片段,但可能有更好的方法来实现同样的效果。)

您可以使用列表理解,获得相应的片段及其平均值

>>> a = [3, 5, 1, 6, 7]
>>> [a[max(0, i-1):i+2] for i in range(len(a))]
[[3, 5], [3, 5, 1], [5, 1, 6], [1, 6, 7], [6, 7]]
>>> [np.mean(a[max(0, i-1):i+2]) for i in range(len(a))]
[4.0, 3.0, 4.0, 4.666666666666667, 6.5]

(在这里使用
max(0,i-1)
,因为
[-1:2]
将是一个空片,但可能有更好的方法来实现同样的效果。)

哦,有很多不同的方法。还有一个:

x = np.array([3,5,1,6,7])
y = np.convolve(x, np.ones((3,))/3, mode='same')

# fixing the values at the boundaries
y[0]  = np.mean(x[:2])
y[-1] = np.mean(x[-2:])

它使用卷积来计算每3个相邻元素的平均值,但它在边界处填充零,因此我们需要第二步来修复这些元素。

哦,有很多不同的方法。还有一个:

x = np.array([3,5,1,6,7])
y = np.convolve(x, np.ones((3,))/3, mode='same')

# fixing the values at the boundaries
y[0]  = np.mean(x[:2])
y[-1] = np.mean(x[-2:])


它使用卷积来计算每3个相邻元素的平均值,但它在边界处填充零,因此我们需要第二步来修复这些值。

过去值和未来值是什么意思?那么除了当前指数的平均值外,其他所有值的平均值是多少?你是说一个数字和它的邻居的平均数吗?不完全是。假设当前索引是a(i),那么在新列表中,索引(a(i))应该包含平均值(a(i-1),a(i),a(i+1))。这不是一个数字及其邻域的平均值吗?是的,你是对的。但我给出了一个明确的解释,
a[0]
是否存在平均值?它是
a[-1]
a[0]
a[1]
的平均值吗?过去和未来的值是什么意思?那么除了当前指数的平均值外,其他所有值的平均值是多少?你是说一个数字和它的邻居的平均数吗?不完全是。假设当前索引是a(i),那么在新列表中,索引(a(i))应该包含平均值(a(i-1),a(i),a(i+1))。这不是一个数字及其邻域的平均值吗?是的,你是对的。但我给出了一个明确的解释,
a[0]
是否存在平均值?这是
a[-1]
a[0]
a[1]
的平均值吗?太好了!谢谢
max(0,i-1)
neat@timgeb但是如果你只需要写
[-1:2]
就可以得到前两个元素,就像
[-2:len+3]
仍然会给你最后两个元素一样,这会更整洁。能够为最后一个元素使用
[-1]
是很好的,但是Python在这里确实可以更智能一些。而且,在这一行中,计算max的次数太多了。你知道,除了第一次呼叫,每次的结果都是i-1。仍然很整洁。@timgeb完全正确,但任何其他方式都更难阅读。如果i==0,可能
0,否则i-1
会快一点(也不太可怕)。太好了!谢谢
max(0,i-1)
neat@timgeb但是如果你只需要写
[-1:2]
就可以得到前两个元素,就像
[-2:len+3]
仍然会给你最后两个元素一样,这会更整洁。能够为最后一个元素使用
[-1]
是很好的,但是Python在这里确实可以更智能一些。而且,在这一行中,计算max的次数太多了。你知道,除了第一次呼叫,每次的结果都是i-1。仍然很整洁。@timgeb完全正确,但任何其他方式都更难阅读。如果i==0,则可能
0,否则i-1
会快一点(也不太可怕)。