pythonnumpysignal-processingnumpy-ndarrayindex-error

IndexError when using Enumerated Indexes in NumPy


I am trying to create a fifth-order FIR filter in Python described by the following difference equation (apologies dark mode users but LaTeX is not yet supported on SO):

diff_eq

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

When using the filter, the Traceback leads me to the following line:

     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

I have tried playing around with indexes and all, but have not managed to understand why this error is being caused.

TIA


Solution

  • As someone suggested in the comments, this case use requires looping over indexes and elements on their own, as using for index in enumerate(ndarray) will result in index being a tuple rather than being an integer. Furthermore, using for index, item in enumerate(ndarray) is suggested, as shown below:

    # 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