2016-08-08 5 views
2

Ich bin bei der Montage eine Reihe von Daten mit numpy.lstsq():Parameter Einschränkung in numpy lstsq

numpy.linalg.lstsq(a,b)[0] 

kehrt so etwas wie:

array([ -0.02179386, 0.08898451, -0.17298247, 0.89314904]) 

Beachten Sie die passende Lösung eine Mischung aus positiven und negativen Schwimmer ist.

Leider stellen die passenden Lösungen in meinem physischen Modell eine Masse dar: Folglich möchte ich lstsq() erzwingen, eine Reihe positiver Werte als eine Lösung der Anpassung zurückzugeben. Ist es möglich, dies zu tun?

d.h.

solution = {a_1, ... a_i, ... a_N} with a_i > 0 for i = {1, ..., N} 
+0

Sie können die negativen Float-Werte mit Nullen wie 'np.linalg.lstsq (A, y) [0] .clip (min = 0)' ersetzen, wenn es das ist, was Sie fragen. –

+0

nein, ich möchte lstsq eine Lösung mit nur positiven Werten finden. Wenn ich negative Werte in einer Lösung durch 0 ersetze, wie Sie vorschlagen, stimmt die Anpassung nicht mehr überein. – rudy

Antwort

2

Nicht-negative kleinsten Quadrate wird in scipy.optimize.nnls implementiert.

from scipy.optimize import nnls 

solution = nnls(a, b)[0] 
+0

genau das, was ich suchte thx! (Entschuldigung, ich kann nicht updaten, weil ich nicht genug Ruf habe) – rudy

+0

Sie können meine Antwort immer noch akzeptieren, indem Sie auf das Häkchen auf der linken Seite klicken. –

Verwandte Themen