2014-10-17 12 views
5

używam numpy.polyfit dopasować 2nd zamówienia polynom do zestawu danychnumpy.polyfit daje pusty reszt tablicę

fit1, fit_err1, _, _, _ = np.polyfit(xint[:index_max], yint[:index_max], 2, full=True)

Dla niektórych kilka przykładów moich danych, zmienna fit_err1 jest pusta, chociaż dopasowanie się powiodło, tzn. fit1 nie jest pusty!

Czy ktoś wie, co oznacza pusty pozostałości w tym kontekście? Dziękuję Ci!

EDIT: jeden przykład zbiór danych:

x = [-488., -478., -473.] 
y = [ 0.02080881, 0.03233648, 0.03584448] 

fit1, fit_err1, _, _, _ = np.polyfit(x, y, 2, full=True) 

wynik:

fit1 = [ -3.00778818e-05 -2.79024663e-02 -6.43272769e+00] 
fit_err1 = [] 

wiem, że zamontowanie 2nd zamówienia polynom do zestawu trzech kwestii nie jest bardzo przydatne, ale potem wciąż oczekują, że funkcja podniesie ostrzeżenie, lub (jak to faktycznie określiło dopasowanie) zwraca rzeczywiste reszty lub obie (jak "tutaj są reszty, ale twoje warunki są kiepskie!").

+2

Czy możesz podać mały przykład niektórych danych, które powodują to zachowanie? –

+3

Wielomian drugiego rzędu może być dokładnie dopasowany do trzech punktów, więc wszystkie wartości będą zerowe. Jeśli jedyną sytuacją, w której nie uzyskasz resztek, jest to, że liczba punktów jest dokładnie o jeden większa niż kolejność wielomianu, to jest twoje wyjaśnienie tego, co się dzieje. – Jaime

+0

@ Junime: dobry punkt! Ale jeśli dopasowanie jest dokładne, spodziewam się, że reszty będą raczej 0 niż [], czyż nie? – jkalden

Odpowiedz

5

Jak zauważył @Jaime, jeśli masz trzy punkty, wielomian drugiego rzędu dokładnie je dopasuje. A twoja uwaga, że ​​błąd powinien być raczej 0 niż pusta tablica ma sens, ale jest to obecne zachowanie np.linalg.lstsq, .

Możemy przetestować ten problem robi najmniejszych kwadratów dopasowania równania y = a*x**0 + b*x**1 + c*x**2 że znamy odpowiedź powinna być a=0, b=0, c=1:

np.linalg.lstsq([[1, 1 ,1], [1, 2, 4], [1, 3, 9]], [1, 4, 9]) 
#(array([ -3.43396424e-15, 3.88578059e-15, 1.00000000e+00]), 
# array([], dtype=float64), 
# 3, 
# array([ 10.64956309, 1.2507034 , 0.15015641])) 

gdzie widzimy, że drugie wyjście jest pusta tablica. I this is intended to work like this.

+0

Dziękujemy @Saullo Castro! Nadal nie rozumiem intencji kryjącej się za pustą wartością zwracaną, ale przynajmniej teraz wiem, że jest ona pusta przez Intention, tj. Nie jest to błąd, ale funkcja! – jkalden

+1

@jkalden pamiętaj, że 'NumPy' ciągle się rozwija i możesz wnieść swój wkład w dyskusję na ten temat na liście mailingowej ([email protected]) –

+1

Więc na wynos jest to, że w obecnej implozji pusta tablica oznacza, że ​​pasuje dokładnie ? – Keith

Powiązane problemy