2017-08-02 9 views
4

numpy.linalg.choleskyのコレスキー分解が見つかりましたが、LDU分解を見つけることができませんでした。誰も使用する機能を提案できますか?Numpyには組み込み/簡易LDU分解メソッドがありますか?

+0

はこちらをご覧ください:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.cholesky.htmlはこれがある – Dalton

+3

オフトピックリクエストではなく、これを行うscipyの機能があります。投票に同意した人は、あなたはそれを知っているようには見えませんが、おそらくこのタグを表示すべきではありません。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅAPIのために "..request"に該当します。それはまあまあですが。 – user2864740

答えて

7

Scipyには、LU分解機能があります。scipy.linalg.luです。これはまた、混合行列Pを導入することにも注意してください。 This answerは、なぜこれが起こるかについて素敵な説明をしてくれます。

特にLDUが必要な場合は、U行列を正規化してDを引き出すことができます。ここで

は、あなたがそれを行う可能性があります方法は次のとおりです。

>>> import numpy as np 
>>> import scipy.linalg as la 
>>> a = np.array([[2, 4, 5], 
        [1, 3, 2], 
        [4, 2, 1]]) 
>>> (P, L, U) = la.lu(a) 
>>> P 
array([[ 0., 1., 0.], 
     [ 0., 0., 1.], 
     [ 1., 0., 0.]]) 
>>> L 
array([[ 1.  , 0.  , 0.  ], 
     [ 0.5  , 1.  , 0.  ], 
     [ 0.25  , 0.83333333, 1.  ]]) 
>>> U 
array([[ 4. , 2. , 1. ], 
     [ 0. , 3. , 4.5], 
     [ 0. , 0. , -2. ]]) 
>>> D = np.diag(np.diag(U)) # D is just the diagonal of U 
>>> U /= np.diag(U)[:, None] # Normalize rows of U 
>>> P.dot(L.dot(D.dot(U))) # Check 
array([[ 2., 4., 5.], 
     [ 1., 3., 2.], 
     [ 4., 2., 1.]]) 
+0

正規化を実行する方法をデモンストレーションすると便利です。 – user2357112

+0

@ user2357112完了。 – Praveen

+1

これは最高の利用可能なビルトインのように見えますが、入力なしではLU分解なしのように見える入力に対して非同一性置換行列を与えることは残念です。 – user2357112

関連する問題