linalg.lstsq(a, b, rcond='warn')[source]

Devuelve la solución de mínimos cuadrados a una ecuación de matriz lineal.

Calcula el vector x que resuelve aproximadamente la ecuación a @ x = b. La ecuación puede estar subdeterminada, bien o sobredeterminada (es decir, el número de filas linealmente independientes de a puede ser menor, igual o mayor que su número de columnas linealmente independientes). Si a es cuadrado y de rango completo, entonces x (pero para el error de redondeo) es la solución “exacta” de la ecuación. Demás, x minimiza la norma euclidiana 2 ||  b - hacha ||.

Parámetros
a(M, N) array_like

Matriz de “coeficientes”.

b(M,), (M, K) array_like

Valores de ordenadas o “variables dependientes”. Si b es bidimensional, la solución de mínimos cuadrados se calcula para cada uno de los K columnas de b.

rcondfloat, optional

Relación de corte para pequeños valores singulares de a. Para los propósitos de la determinación de rango, los valores singulares se tratan como cero si son menores que rcond veces el valor singular más grande de a.

Modificado en la versión 1.14.0: Si no se establece, se da una FutureWarning. El valor predeterminado anterior de -1 utilizará la precisión de la máquina como rcond parámetro, el nuevo valor predeterminado utilizará los tiempos de precisión de la máquina max(M, N). Para silenciar la advertencia y usar el nuevo valor predeterminado, use rcond=None, para seguir usando el comportamiento anterior, use rcond=-1.

Devoluciones
x(N,), (N, K) ndarray

Solución de mínimos cuadrados. Si b es bidimensional, las soluciones están en el K columnas de x.

residuals(1,), (K,), (0,) ndarray

Sumas de residuos al cuadrado: norma 2 euclidiana al cuadrado para cada columna en b - a @ x. Si el rango de a es b es unidimensional, esta es una matriz de formas (1,). De lo contrario, la forma es (K,).

rankint

Rango de matriz a.

s(min(M, N),) ndarray

Valores singulares de a.

Eleva
LinAlgError

Si el cálculo no converge.

Ver también

scipy.linalg.lstsq

Función similar en SciPy.

Notas

Si b es una matriz, entonces todos los resultados de la matriz se devuelven como matrices.

Ejemplos de

Ajustar una línea y = mx + c, a través de algunos puntos de datos ruidosos:

>>> x = np.array([0,1,2,3])>>> y = np.array([-1,0.2,0.9,2.1])

Al examinar los coeficientes, vemos que la línea debe tener un gradiente de aproximadamente 1 y cortar el eje y en, más o menos, -1.

Podemos reescribir la ecuación lineal como y = Ap, dónde A = [[x 1]] y p = [[m], [c]]. Ahora usa lstsq para resolver p:

>>> A = np.vstack([x, np.ones(len(x))]).T
>>> A
array([[0.,1.],[1.,1.],[2.,1.],[3.,1.]])
>>> m, c = np.linalg.lstsq(A, y, rcond=None)[0]>>> m, c
(1.0-0.95)# may vary

Trace los datos junto con la línea ajustada:

>>>import matplotlib.pyplot as plt
>>> _ = plt.plot(x, y,'o', label='Original data', markersize=10)>>> _ = plt.plot(x, m*x + c,'r', label='Fitted line')>>> _ = plt.legend()>>> plt.show()

../../_images/numpy-linalg-lstsq-1.png