2012-01-19 10 views
6

De acuerdo con su documentación para Matlab filter() y SciPy lfilter(), parece que deberían ser "compatibles". Sin embargo, tengo un problema, portar un código de Matlab más grande en Python, para el cual obtengo ValueError: object of too small depth for desired array. Como no puedo pensar en cómo puedo presentar mi fuente sin complicar ella, voy a utilizar el ejemplo proporcionado en la documentación del Matlab:Filtro Matlab() con SciPy lfilter()

data = [1:0.2:4]'; 
windowSize = 5; 
filter(ones(1,windowSize)/windowSize,1,data) 

que traduzco en Python a:

import numpy as np 
from scipy.signal import lfilter 

data = np.arange(1, 4.1, 0.2) 
windowSize = 5 
lfilter(np.ones((1, windowSize))/windowSize, 1, data) 

En este caso me sale:
ValueError: object too deep for desired array

¿Por qué me salen estos errores?

Respuesta

3

¿Hay alguna razón por la que agregue una dimensión extra al crear su matriz de unidades? Es esto lo que necesita:

lfilter(np.ones(windowSize)/windowSize, 1, data) 
+0

No hay razón, solo mi ignorancia :) No vi eso mientras traducía. Gracias – theta

+1

ah sí, ahora lo recuerdo, en los matlab (10) se devuelve un 10 por 10, oh esos buenos viejos días matlab. –