我正在使用 scipy 执行非负最小二乘法。一个简单的例子如下:
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)
现在,我遇到了一些条目丢失A
或b
可能丢失(np.NaN
)的情况。就像是,
A_2 = A.copy()
A_2[0,2] = np.NaN
当然,在 A_2, b 上运行 NNLS 将不起作用,因为 scipy 不期望 a inf
or nan
。
我们如何执行 NNLS,从计算中屏蔽掉丢失的条目。实际上,这应该转化为
Minimize |(A_2.x- b)[mask]|
其中掩码可以定义为:
mask = ~np.isnan(A_2)
A
通常,和都可能缺少条目b
。
可能有帮助: