【问题标题】:Accessing the position [i-1] of an array in python - Filter在python中访问数组的位置[i-1] - 过滤器
【发布时间】:2018-05-22 16:24:14
【问题描述】:

我正在尝试在 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] 位置(在第一个循环中),也许这是问题所在?

有人有什么建议吗?

谢谢你们!

【问题讨论】:

  • 你的m文件包含什么?
  • 你的循环关系似乎没有起点。
  • 我怀疑out 中应该有一个初始值。
  • 该文件是一个 .txt 文件,包含 512 个值 (0 - 511)。我可以得到 y[i]
  • user2357112 所说的。 out[0] 应该是什么?

标签: python arrays filter index-error


【解决方案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()

【讨论】:

  • 有效!感谢您的帮助,对不起,如果是一个愚蠢的问题。
【解决方案2】:

您可以使用列表推导很容易地做到这一点。

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]

这是您期望的输出吗?

【讨论】:

  • 这也有帮助!谢谢
猜你喜欢
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
相关资源
最近更新 更多