在NumPy中使用枚举索引时出现IndexError

1l5u6lss  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(169)

我尝试用Python创建一个五阶FIR滤波器,由以下差分方程描述(抱歉,暗模式用户,但SO上尚不支持LaTeX):

def filter(x):

    h = np.array([-0.0147, 0.173, 0.342, 0.342, 0.173, -0.0147])
    y = np.zeros_like(x)

    buf_array = np.zeros_like(h)
    buf = 0.0

    for n in enumerate(x):
        for k in enumerate(h):
            buf = h[k]*x[n-k]
            buf_array[k] = buf

        y[n] = np.sum(buf_array)

    return y

使用筛选器时,Traceback会将我引导到以下行:

10 for n in enumerate(x):
     11     for k in enumerate(h):
---> 12         buf = h[k]*x[n-k]
     13         buf_array[k] = buf
     15     y[n] = np.sum(buf_array)

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

我试过摆弄索引和所有的东西,但是还没有设法理解为什么会引起这个错误。
短暂性脑缺血

ugmeyewa

ugmeyewa1#

正如有人在评论中建议的那样,这种情况下的使用需要循环遍历索引和元素本身,因为使用for index in enumerate(ndarray)将导致index成为元组而不是整数。此外,建议使用for index, item in enumerate(ndarray),如下所示:

# Filter function
def filter(x):

    h = np.array([-0.0147, 0.173, 0.342, 0.342, 0.173, -0.0147])
    y = np.zeros_like(x)

    buf_array = np.zeros_like(h)
    buf = 0.0

    for n, n_i in enumerate(x):
        for k, k_i in enumerate(h):
            i = n-k
            buf = h[k]*x[i]
            buf_array[k] = buf

        y[n] = np.sum(buf_array)

    return y

相关问题