scipy.optimize.nnls¶
- scipy.optimize.nnls(A, b, maxiter=None)[source]¶
Solve
argmin_x || Ax - b ||_2
forx>=0
. This is a wrapper for a FORTRAN non-negative least squares solver.- Parameters
- Andarray
Matrix
A
as shown above.- bndarray
Right-hand side vector.
- maxiter: int, optional
Maximum number of iterations, optional. Default is
3 * A.shape[1]
.
- Returns
- xndarray
Solution vector.
- rnormfloat
The residual,
|| Ax-b ||_2
.
See also
lsq_linear
Linear least squares with bounds on the variables
Notes
The FORTRAN code was published in the book below. The algorithm is an active set method. It solves the KKT (Karush-Kuhn-Tucker) conditions for the non-negative least squares problem.
References
Lawson C., Hanson R.J., (1987) Solving Least Squares Problems, SIAM
Examples
>>> from scipy.optimize import nnls ... >>> A = np.array([[1, 0], [1, 0], [0, 1]]) >>> b = np.array([2, 1, 1]) >>> nnls(A, b) (array([1.5, 1. ]), 0.7071067811865475)
>>> b = np.array([-1, -1, -1]) >>> nnls(A, b) (array([0., 0.]), 1.7320508075688772)