Взяв в среднем каждые 2 точки данных в массиве, создав новый массив - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь взять среднее значение каждых 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

Буду признателен за любую помощь, которая может быть оказана.Oliver

Ответы [ 4 ]

0 голосов
/ 15 марта 2019
y1 = np.array([1,2,3,4,5,6,7,8,9,10)]

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

РЕДАКТИРОВАТЬ: этот метод работает примерно в 20 раз быстрее, чем при использовании цикла for, и примерно в 90 раз быстрее, чем при использовании zip и списков.

0 голосов
/ 14 марта 2019

Хороший (если немного сложный) способ сделать это - использовать творческие ломтики и 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]

Это произойдет сбой, если длина списка не делится на два.

0 голосов
/ 14 марта 2019
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)

Это даст вам список со средними значениями

0 голосов
/ 14 марта 2019

Я думаю, что это простая опечатка.y1[i+2[i]] + y1[2+2*i] должно быть

y1[2*i] + y1[2*i+1]

Списки Python начинаются с индекса 0.

Возможно, вам придется настроить if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...