首页 > 解决方案 > 在python中访问数组的位置[i-1] - 过滤器

问题描述

我正在尝试在 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 行,in out.append(((1-lamb) * y[i]) + (lamb * out[i - 1])) IndexError: list index out of range

我知道我无法访问 out[-1] 位置(在第一个循环中),也许这是问题所在?

有人有任何提示吗?

谢谢你们!

标签: pythonarraysfilterindex-error

解决方案


首先,您可以在 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()

推荐阅读