Sök…


Anmärkningar

Från version 1.8 kan flera av rutinerna i np.linalg fungera på en "stack" med matriser. Det vill säga rutinen kan beräkna resultat för flera matriser om de staplas ihop. Till exempel tolkas A här som två staplade 3-för-3-matriser:

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])

De officiella np dokumenten anger detta via parameterspecifikationer som a : (..., M, M) array_like .

Lös linjära system med n.solve

Tänk på följande tre ekvationer:

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

Vi kan uttrycka detta system som en matrisekvation A * x = b med:

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

np.linalg.solve att lösa för x :

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

A måste vara en kvadratisk matris med full rang: Alla rader måste vara linjärt oberoende. A bör vara inverterbar / icke-singular (dess bestämning är inte noll). Till exempel, om en rad A är en multipel av en annan, kommer att ringa linalg.solve att höja 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])

Sådana system kan lösas med np.linalg.lstsq .

Hitta den minsta kvadratlösningen på ett linjärt system med np.linalg.lstsq

Minst kvadrater är en standardmetod för problem med fler ekvationer än okända, även känd som överbestämda system.

Tänk på de fyra ekvationerna:

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

Vi kan uttrycka detta som en matrismultiplikation 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])

np.linalg.lstsq med np.linalg.lstsq :

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

x är lösningen, residuals summan, rank matrisrangen för ingång A och s singulärvärdena för A Om b har mer än en dimension, kommer lstsq att lösa systemet som motsvarar varje kolumn i 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 och s beror bara på A , och är därmed desamma som ovan.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow