2012-01-19 16 views
6

Secondo la loro documentazione per Matlab filter() e SciPy lfilter(), sembra che dovrebbero essere "compatibili". Tuttavia ho un problema, il porting di codice Matlab più grande in Python, per il quale ottengo ValueError: object of too small depth for desired array. Siccome non riesco a pensare a come posso presentare la mia fonte senza complicare esso, userò l'esempio fornito nella documentazione di Matlab:Filtro Matlab() con SciPy lfilter()

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

che traduco in Python per:

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) 

In questo caso ottengo:
ValueError: object too deep for desired array

Perché ottengo questi errori?

risposta

3

C'è una ragione per cui stai aggiungendo una dimensione extra quando crei il tuo array di quelli? È ciò di cui hai bisogno:

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

Non c'è motivo, solo la mia ignoranza :) Non l'ho notato durante la traduzione. Grazie – theta

+1

ah sì, mi ricordo ora, in MATLAB quelli (10) restituisce un 10 per 10, oh quei bei vecchi giorni MATLAB. –