サーチ…


備考

バージョン1.8では、 np.linalgいくつかのルーチンは、行列の「スタック」上で動作することができます。つまり、複数の行列が積み重ねられている場合、ルーチンは結果を計算できます。たとえば、 Aは2つの積み重ねられた3行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])

公式のnpドキュメントはa : (..., M, M) array_likeようなパラメータ指定を介してこれを指定していますa : (..., M, M) array_like

np.solveで線形システムを解く

次の3つの式を考えてみましょう。

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

この系を行列方程式A * x = bとして表すことができます。

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

次に、 np.linalg.solveを使ってxを解きます:

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

Aは正方行列と全階​​数行列でなければなりません。すべての行は線形独立でなければなりません。 Aは可逆的/非特異的でなければなりません(その行列式はゼロではありません)。たとえば、 A 1つの行が別の行であれば、 linalg.solveを呼び出すとlinalg.solveLinAlgError: 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])

このようなシステムは、 np.linalg.lstsqで解決できます。

np.linalg.lstsqを使用して線形システムに最小二乗解を求める

最小二乗は、未決定システムよりも知られているよりも多くの方程式の問題に対する標準的なアプローチです。

4つの方程式を考えてみましょう。

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

これを行列乗法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解決してnp.linalg.lstsq

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

xは解、 residualsは和であり、入力A 行列ランクranksA 特異値ランク付け Abが複数の次元を持つ場合、 lstsqb各列に対応するシステムを解決します。

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]

ranksAのみに依存し、従って上記と同じである。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow