Доступ к позиции [i-1] массива в python - фильтр - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь настроить фильтр в Python, и я застрял в основных вещах.

Это функция, которую я должен реализовать:

y[n] = (1 − λ) · x[n] + λ · y[n − 1]

Я читаю файл m и применяю фильтр.

Вот код:

import sys
import numpy as np
import matplotlib.pyplot as plt

y = np.loadtxt('acs712_192us.m')
size = len(y)

x = np.arange(0, size)

out = []

lamb = 0.9 

for i in range(0, len(y)):
    out.append(((1-lamb) * y[i]) + (lamb * out[i - 1]))

plt.plot(x, y)
plt.plot(x, out)
plt.show()

Когда я запускаю эту программу, получаю следующую ошибку:

Файл "main_LI.py", строка 15, в out.append (((1-lamb) * y [i]) + (lamb * out [i - 1])) IndexError: список индексов вне диапазона

Я знаю, что не могу получить доступ к позиции [-1] (в первом цикле), может быть в этом проблема?

У кого-нибудь есть советы?

Спасибо, ребята!

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы можете использовать списочное понимание, чтобы сделать это довольно легко.

l = 0.9
x = np.arange(0, 10)
filtered = [x[i] if i == 0 else (1-l)*x[i] + l*x[i-1] for i in range(0,len(x))]

>>> print(filtered)
[0, 0.09999999999999998, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1000000000000005, 7.1, 8.1]

это результат, который вы ожидаете?

0 голосов
/ 22 мая 2018

Во-первых, вы можете использовать отрицательные индексы в Python.Проблема в том, что вы предоставляете индекс, который не существует.

out изначально представляет собой пустой список, поэтому проблема заключается в том, что вы пытаетесь получить доступ к индексу, который не существует в первой итерации:

import sys
import numpy as np
import matplotlib.pyplot as plt

y = np.loadtxt('acs712_192us.m')
size = len(y)

x = np.arange(0, size)

out = []

lamb = 0.9 

for i in range(len(y)):
    if i == 0:
       out.append(value) # value is what you want out[0] to be
    else:
        out.append(((1-lamb) * y[i]) + (lamb * out[i - 1]))

plt.plot(x, y)
plt.plot(x, out)
plt.show()
...