访问 python 中数组的位置 [i-1] - 过滤器
Accessing the position [i-1] of an array in python - Filter
我正在尝试在 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()
当我运行这个程序时,得到如下错误:
File "main_LI.py", line 15, in out.append(((1-lamb) * y[i]) + (lamb * out[i - 1])) IndexError: list index out of range
我知道我无法访问 out[-1] 位置(在第一个循环中),也许这是问题所在?
有人有什么建议吗?
谢谢大家!
首先,您可以在Python中使用negative indexes。问题是您提供的索引不存在。
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()
您可以使用列表理解来轻松完成此操作。
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]
这是您期望的输出吗?
我正在尝试在 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()
当我运行这个程序时,得到如下错误:
File "main_LI.py", line 15, in out.append(((1-lamb) * y[i]) + (lamb * out[i - 1])) IndexError: list index out of range
我知道我无法访问 out[-1] 位置(在第一个循环中),也许这是问题所在?
有人有什么建议吗?
谢谢大家!
首先,您可以在Python中使用negative indexes。问题是您提供的索引不存在。
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()
您可以使用列表理解来轻松完成此操作。
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]
这是您期望的输出吗?