我试图获取数组中每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
我将不胜感激。 奥利弗
答案 0 :(得分:0)
我认为这是一个简单的错字。 y1[i+2[i]] + y1[2+2*i]
应该是
y1[2*i] + y1[2*i+1]
Python列表从索引0开始。
您可能需要调整if
。
答案 1 :(得分:0)
一种简洁(如果有些棘手)的方法是创造性地使用切片和zip
-请参见下面的控制台记录。
# Input data.
>>> y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Look at the even and odd values.
>>> y1[::2], y1[1::2]
([1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
# Use zip to transpose these two lists of five into five lists of two.
>>> zip(*(y1[::2], y1[1::2]))
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
# Use a list comprehension over the pairs to average them.
>>> [(a + b) / 2. for (a, b) in zip(*(y1[::2], y1[1::2]))]
[1.5, 3.5, 5.5, 7.5, 9.5]
如果列表的长度不能被二整除,则会崩溃。
答案 2 :(得分:0)
y1 = [1,2,3,4,5,6,7,8,9,10]
avgy = []
for i in range(0,len(y1),2):
avgy.append((y1[i]+y1[i+1])/2)
print(avgy)
这将为您提供平均值列表
答案 3 :(得分:0)
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倍。