Обратите внимание, что рекомендуется использовать numpy's array
вместо matrix
: см. этот абзац в руководстве пользователя. Путаница в некоторых ответах является примером того, что может пойти не так ... В частности, D ** 0,5 и продукты поэлементно , если применять их к массивам с пустым массивом, что даст вам неправильный ответ. Например:
import numpy as np
from numpy import dot, diag
D = diag([1., 2., 3.])
print D**(-0.5)
[[ 1. Inf Inf]
[ Inf 0.70710678 Inf]
[ Inf Inf 0.57735027]]
В вашем случае матрица является диагональной, и поэтому корень квадратный из матрицы - это просто еще одна диагональная матрица с квадратным корнем из диагональных элементов. Используя массивы numpy, уравнение становится
D = np.array([1., 2., 3.]) # note that we define D just by its diagonal elements
A = np.cov(np.random.randn(3,100)) # a random symmetric positive definite matrix
L = dot(diag(D**(-0.5)), dot(A, diag(D**0.5)))