Если ваши наблюдения в строках, а переменные в столбцах (установите rowvar
на False
), тогда это должно быть x.T @ x
:
import numpy as np
x0 = np.array([[2, 1, 5], [7, 4, 8], [4, 7, 6]])
x = x0 - x0.mean(axis=0)
cov1 = x.T @ x / 3
cov2 = np.cov(x, rowvar=False, bias=True)
assert np.allclose(cov1, cov2)
x @ x.T
для случая, когда наблюдения находятся в столбцах, а переменные - в строках:
x = x0 - x0.mean(axis=1)[:,None]
cov1 = x @ x.T / 3
cov2 = np.cov(x, bias=True) # rowvar=True by default
assert np.allclose(cov1, cov2)