SciPy

scipy.optimize.nnls

scipy.optimize.nnls(A, b, maxiter=None)[source]

Solve argmin_x || Ax - b ||_2 for x>=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)

Previous topic

scipy.optimize.least_squares

Next topic

scipy.optimize.lsq_linear