numpy
Lineare Algebra mit np.linalg
Suche…
Bemerkungen
Ab Version 1.8 können einige der Routinen in np.linalg
mit einem Stapel von Matrizen arbeiten. Das heißt, die Routine kann Ergebnisse für mehrere Matrizen berechnen, wenn sie zusammengestapelt sind. Zum Beispiel wird A
hier als zwei gestapelte 3-mal-3-Matrizen interpretiert:
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])
Die offiziellen np
Dokumente geben dies über Parameterspezifikationen an wie a : (..., M, M) array_like
.
Lösen Sie lineare Systeme mit np.solve
Betrachten Sie die folgenden drei Gleichungen:
x0 + 2 * x1 + x2 = 4
x1 + x2 = 3
x0 + x2 = 5
Wir können dieses System als Matrixgleichung A * x = b
ausdrücken mit:
A = np.array([[1, 2, 1],
[0, 1, 1],
[1, 0, 1]])
b = np.array([4, 3, 5])
Verwenden Sie dann np.linalg.solve
, um nach x
zu lösen:
x = np.linalg.solve(A, b)
# Out: x = array([ 1.5, -0.5, 3.5])
A
muss eine quadratische und eine vollwertige Matrix sein: Alle Zeilen müssen linear unabhängig sein. A
sollte invertierbar / nicht singulär sein (seine Determinante ist nicht Null). Wenn zum Beispiel eine Reihe von A
ein Vielfaches einer anderen ist, wird der Aufruf von linalg.solve
die LinAlgError: Singular matrix
erhöhen
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])
Solche Systeme können mit np.linalg.lstsq
gelöst np.linalg.lstsq
.
Finden Sie mit np.linalg.lstsq die Lösung der kleinsten Quadrate für ein lineares System
Least Squares ist ein Standardansatz für Probleme mit mehr Gleichungen als Unbekannten, die auch als überbestimmte Systeme bezeichnet werden.
Betrachten Sie die vier Gleichungen:
x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4
Wir können dies als Matrixmultiplikation A * x = b
ausdrücken:
A = np.array([[1, 2, 1],
[1,1,2],
[2,1,1],
[1,1,1]])
b = np.array([4,3,5,4])
Dann lösen Sie mit np.linalg.lstsq
:
x, residuals, rank, s = np.linalg.lstsq(A,b)
x
ist die Lösung, die residuals
die Summe, rank
der Matrix Rang von Eingabe A
und s
die singulären Werte von A
. Wenn b
mehr als eine Dimension hat, lstsq
das System entsprechend jeder Spalte von 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
und s
hängen nur von A
und sind daher die gleichen wie oben.