Jak widać patrząc na source, w najprostszym przypadku bez masek i N
zmiennymi M
próbek każda, zwraca macierz (N, N)
kowariancji obliczonej jako:
(x-m) * (x-m).T.conj()/(N - 1)
Jeżeli *
reprezentuje Produkt matrycy [1]
zaimplementowano grubsza:
X -= X.mean(axis=0)
N = X.shape[1]
fact = float(N - 1)
return dot(X, X.T.conj())/fact
Jeśli chcesz przejrzeć źródło, look here zamiast linku od pana E, chyba że jesteś zainteresowany maskowanymi tablicami. Jak wspomniałeś, the documentation nie jest świetny.
[1], która w tym przypadku jest efektywnie (ale nie dokładnie) produkt zewnętrzna ponieważ (x-m)
ma N
wektory kolumnowe długości M
a zatem (x-m).T
jest wiele wektorów rzędu. Wynik końcowy jest sumą wszystkich produktów zewnętrznych. Ten sam *
da wewnętrzny (skalarny) produkt, jeśli zamówienie zostanie odwrócone. Ale technicznie są to tylko standardowe mnożenia macierzy, a prawdziwy zewnętrzny produkt jest jedynie produktem wektora kolumnowego na wektorze wiersza.
https://github.com/numpy/numpy/blob/master/numpy/ma/extras.py#L1257 – YXD