Buscar..


Observaciones

A partir de la versión 1.8, varias de las rutinas en np.linalg pueden operar en una 'pila' de matrices. Es decir, la rutina puede calcular resultados para matrices múltiples si se apilan juntas. Por ejemplo, A aquí se interpreta como dos matrices apiladas de 3 por 3:

np.random.seed(123)
A = np.random.rand(2,3,3)
b = np.random.rand(2,3)
x = np.linalg.solve(A, b)

print np.dot(A[0,:,:], x[0,:])
# array([ 0.53155137,  0.53182759,  0.63440096])

print b[0,:]
# array([ 0.53155137,  0.53182759,  0.63440096])

Los documentos oficiales de np especifican esto a través de especificaciones de parámetros como a : (..., M, M) array_like .

Resolver sistemas lineales con np.solve.

Considera las siguientes tres ecuaciones:

x0 + 2 * x1 + x2 = 4
         x1 + x2 = 3
x0 +          x2 = 5

Podemos expresar este sistema como una ecuación matricial A * x = b con:

A = np.array([[1, 2, 1],
              [0, 1, 1],
              [1, 0, 1]])
b = np.array([4, 3, 5])

Luego, use np.linalg.solve para resolver para x :

x = np.linalg.solve(A, b)
# Out: x = array([ 1.5, -0.5,  3.5])

A debe ser una matriz cuadrada y de rango completo: todas sus filas deben ser linealmente independientes. A debe ser invertible / no singular (su determinante no es cero). Por ejemplo, si una fila de A es un múltiplo de otra, llamar a linalg.solve generará LinAlgError: Singular matrix :

A = np.array([[1, 2, 1], 
              [2, 4, 2],   # Note that this row 2 * the first row
              [1, 0, 1]])
b = np.array([4,8,5])

Tales sistemas se pueden resolver con np.linalg.lstsq .

Encuentre la solución de mínimos cuadrados para un sistema lineal con np.linalg.lstsq

Los cuadrados mínimos es un enfoque estándar para problemas con más ecuaciones que incógnitas, también conocidas como sistemas sobredeterminados.

Considera las cuatro ecuaciones:

x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4

Podemos expresar esto como una multiplicación matricial A * x = b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([4,3,5,4])

Luego resuelve con np.linalg.lstsq :

x, residuals, rank, s = np.linalg.lstsq(A,b)

x es la solución, residuals la suma, rank el rango de matriz de la entrada A y s los valores singulares de A Si b tiene más de una dimensión, lstsq resolverá el sistema correspondiente a cada columna de b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([[4,3,5,4],[1,2,3,4]]).T # transpose to align dimensions
x, residuals, rank, s = np.linalg.lstsq(A,b)
print x # columns of x are solutions corresponding to columns of b
#[[ 2.05263158  1.63157895]
# [ 1.05263158 -0.36842105]
# [ 0.05263158  0.63157895]]
print residuals # also one for each column in b
#[ 0.84210526  5.26315789]

rank y s solo dependen de A , y por lo tanto son los mismos que los anteriores.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow