Come si può vedere guardando il source, nel caso più semplice, senza maschere, e N
variabili con M
campioni ciascuno, restituisce la matrice (N, N)
covarianza calcolata come:
(x-m) * (x-m).T.conj()/(N - 1)
Qualora il *
rappresenta la matrice prodotto [1]
Implementato approssimativamente come:
X -= X.mean(axis=0)
N = X.shape[1]
fact = float(N - 1)
return dot(X, X.T.conj())/fact
Se si desidera esaminare la fonte, look here anziché il collegamento da Mr E a meno che non si sia interessati agli array mascherati. Come hai detto, lo the documentation non è eccezionale.
[1] che in questo caso è efficace (ma non esattamente) il prodotto esterno perché (x-m)
ha N
vettori colonna di lunghezza M
e quindi (x-m).T
è come molti vettori riga. Il risultato finale è la somma di tutti i prodotti esterni. Lo stesso *
darà il prodotto interno (scalare) se l'ordine è invertito. Ma tecnicamente queste sono solo delle moltiplicazioni di matrice standard e il vero prodotto esterno è solo il prodotto di un vettore di colonna su un vettore di riga.
https://github.com/numpy/numpy/blob/master/numpy/ma/extras.py#L1257 – YXD