Ich mache nicht-negative kleinste Quadrate mit scipy. Ein triviales Beispiel würde wie folgt aussehen:Scipy NNLS mit Maske
import numpy as np
from scipy.optimize import nnls
A = np.array([[60, 70, 120, 60],[60, 90, 120, 70]], dtype='float32')
b = np.array([6, 5])
x, res = nnls(A, b)
Jetzt habe ich eine Situation, in der einige Einträge in A
oder b
können fehlen (np.NaN
). So etwas wie,
A_2 = A.copy()
A_2[0,2] = np.NaN
Ofcourse, laufen NNLS auf A_2, b wird nicht funktionieren wie scipy keine inf
oder nan
nicht erwartet.
Wie können wir NNLS durchführen, um den fehlenden Eintrag aus der Berechnung auszublenden. Effektiv diese
Minimize |(A_2.x- b)[mask]|
zu
übersetzen sollte, wo Maske wie folgt definiert werden kann:mask = ~np.isnan(A_2)
Im Allgemeinen können Einträge sowohl von A
fehlt und b
.
Möglicherweise hilfreich:
[1] How to include constraint to Scipy NNLS function solution so that it sums to 1
Vielen Dank. Dies ist perfekt! –