python中的基本计算

时间:2018-04-10 11:01:18

标签: python

我写了一个简单的函数来查找随机生成的数据集的均值,方差和协方差。 但是当我将输出与Numpy函数的输出进行比较时,我得到的结果略有不同。

有人可以建议为什么会这样吗?

import random
import numpy as np

def basic_calc():

    x = np.random.randn(10)
    y = np.random.randn(10)

    print(x, y)
    print("########\n########\n Using Basic Calc: ")
    mean_x = np.sum(x)
    mean_x /= x.size
    print("Mean of X: ", mean_x)
    var = 0
    for i in range (9):
        var +=  (x[i] - mean_x)**2
    variance_x = var/(x.size-1)
    print("Variance of X: ", variance_x)
    covar = 0
    for i in range (9):
        covar +=  (x[i] - mean_x)*(y[i] - np.mean(y))
    covar_xy = covar/(y.size-1)
    print("Co-Variance of XY: ", covar_xy)
    print("########\n########\n Using Numpy Functions: ")
    print("Mean of X: ",np.mean(x))
    print("Variance of X: ", np.var(x))
    print("Co-Variance of X,Y: ", np.cov(x,y

编辑:

输出:

使用Basic Calc:

Mean of X:  -0.37229498827575525
Variance of X:  0.9799024073066904
Co-Variance of XY:  -0.05818610994017605

使用Numpy函数:

Mean of X:  -0.37229498827575525
Variance of X:  0.8916536385612055
Co-Variance of X,Y:  [[ 0.99072627 -0.09117693]
 [-0.09117693  0.67371543]]

对于所使用的两种方法,方差和Co方差并不完全相同。

2 个答案:

答案 0 :(得分:1)

这是for i in range(9) 定义中的错误。更改您的代码:

for i in range(10)

为:

range(x)

结果将对齐。请记住,Route::get('/test', 'Product\MuslimController@show')->name('muslim.details'); 计数从0到x-1(含),Python / Numpy索引从0开始。

答案 1 :(得分:1)

首先,您应该检查range(9)是否真的是您想要做的,因为它将从0到8进行索引,而range(10)将从0到9进行索引。

现在出现了方差的定义,你有一个完全集时使用的方差n,以及你有样本时使用的方差n-1。

2之间的差异是值m = sum(xi)/ n是否是实际平均值,或者它是否只是平均值的近似值。

方差n给出实数方差,用于类的高度方差(数据集已满)等情况。在这种情况下,我们使用,

sum([(xi - m) ** 2 for xi in dataset]) / len(dataset)

方差n-1只是一个近似值,并且在股票价格等情况下使用,随着更多数据集的增加,价值会变得更好。在这种情况下,我们使用,

sum([(xi - m) ** 2 for xi in dataset]) / (len(dataset) - 1)

要获得相同的结果,在numby中,您可以使用ddof参数,默认情况下为ddof=0。因此,对于方差n-1,您只需执行ddof=1

np.var(dataset, ddof=1)

sum([(xi - m) ** 2 for xi in dataset]) / (len(dataset) - 1)