【发布时间】:2017-03-21 10:05:08
【问题描述】:
我正在使用 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 不期望 inf 或 nan。
我们如何执行 NNLS,从计算中屏蔽掉缺失的条目。实际上,这应该转化为
Minimize |(A_2.x- b)[mask]|
其中掩码可以定义为:
mask = ~np.isnan(A_2)
一般来说,A 和 b 都可能缺少条目。
可能有帮助:
[1]How to include constraint to Scipy NNLS function solution so that it sums to 1
【问题讨论】:
标签: python numpy optimization scipy lmfit