首页 > 解决方案 > 取数组中每 2 个数据点的平均值,创建一个新数组

问题描述

我试图取一个数组中每 2 个值的平均值,并将新数据存储在一个新数组中。

这是我能得到的:

y1 = np.array([1,2,3,4,5,6,7,8,9,10])

avgy = [0]*(len(y1)//2)

for i in range (0, len(y1)-1):
    if (2*(1+i)<=len(y1)):
        avgy[i] = ( y1[i+2[i]] + y1[2+2*i] )/2

print(avgy)

这是我收到的错误消息:

TypeError                                 Traceback (most recent call last)
<ipython-input-8-624d78987390> in <module>()
      9 for i in range (0, len(y1)-1):
     10     if (2*(1+i)<=len(y1)):
---> 11         avgy[i] = ( y1[i+2[i]] + y1[2+2*i] )/2
     12 
     13 print(avgy)

TypeError: 'int' object is not subscriptable

我将不胜感激任何可以提供的帮助。奥利弗

标签: pythonarraysnumpy

解决方案


y1 = np.array([1,2,3,4,5,6,7,8,9,10)]

avgy = ((y1 + np.roll(y1,1))/2.0)[1::2]

编辑:这种方法比使用 for 循环快 20 倍左右,比使用 zip 和列表理解快 90 倍左右。


推荐阅读