scipy를 사용하여 음수가 아닌 최소 제곱을 수행합니다. 다음과 같이 사소한 예는 다음과 같습니다마스크를 사용하는 Scipy NNLS
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
)가 있습니다. 뭔가 같은, scipy이 inf
또는 nan
을 기대하지 않는
A_2 = A.copy()
A_2[0,2] = np.NaN
는 당연히, A_2에 NNLS를 실행, b는 작동하지 않습니다.
누락 된 항목을 계산에서 제외시키기 위해 어떻게 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
감사합니다. 이것은 완벽 해! –