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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow