Почему numpy cov диагональные элементы и функции var имеют разные значения?

In [127]: x = np.arange(2) In [128]: np.cov(x,x) Out[128]: array([[ 0.5, 0.5], [ 0.5, 0.5]]) In [129]: x.var() Out[129]: 0.25 

Почему это поведение? Я считаю, что диагональные элементы ковариационной матрицы должны быть дисперсией ряда.

В numpy cov по умолчанию задает «степень дельта свободы» 1, а var умолчанию – ddof 0. Из заметок в numpy.var

 Notes ----- The variance is the average of the squared deviations from the mean, ie, ``var = mean(abs(x - x.mean())**2)``. The mean is normally calculated as ``x.sum() / N``, where ``N = len(x)``. If, however, `ddof` is specified, the divisor ``N - ddof`` is used instead. In standard statistical practice, ``ddof=1`` provides an unbiased estimator of the variance of a hypothetical infinite population. ``ddof=0`` provides a maximum likelihood estimate of the variance for normally distributed variables. 

Поэтому вы можете заставить их согласиться, взяв:

 In [69]: cov(x,x)#defaulting to ddof=1 Out[69]: array([[ 0.5, 0.5], [ 0.5, 0.5]]) In [70]: x.var(ddof=1) Out[70]: 0.5 In [71]: cov(x,x,ddof=0) Out[71]: array([[ 0.25, 0.25], [ 0.25, 0.25]]) In [72]: x.var()#defaulting to ddof=0 Out[72]: 0.25