Như bạn thấy nhìn vào source, trong trường hợp đơn giản nhất không có mặt nạ, và N
biến với M
mẫu mỗi, nó sẽ trả về ma trận (N, N)
hiệp phương sai tính như sau:
(x-m) * (x-m).T.conj()/(N - 1)
Trường hợp *
đại diện cho sản phẩm ma trận [1]
thực hiện xấp xỉ như:
X -= X.mean(axis=0)
N = X.shape[1]
fact = float(N - 1)
return dot(X, X.T.conj())/fact
Nếu bạn muốn xem lại nguồn, look here thay vì liên kết từ Mr E trừ khi bạn quan tâm đến mảng bị che. Như bạn đã đề cập, the documentation không tuyệt vời.
[1] mà trong trường hợp này là một cách hiệu quả (nhưng không chính xác) sản phẩm bên ngoài vì (x-m)
có N
vectơ cột của chiều dài M
và do đó (x-m).T
là bao nhiêu vectơ hàng. Kết quả cuối cùng là tổng của tất cả các sản phẩm bên ngoài. Cùng một *
sẽ cung cấp cho sản phẩm bên trong (vô hướng) nếu thứ tự được đảo ngược. Tuy nhiên, về mặt kỹ thuật, đây chỉ là các phép nhân ma trận chuẩn và sản phẩm ngoài thực sự chỉ là sản phẩm của một vectơ cột vào một vectơ hàng.
https://github.com/numpy/numpy/blob/master/numpy/ma/extras.py#L1257 – YXD