Python 3.x 如何在Python中计算协方差和相关性而不使用cov和corr?

Python 3.x 如何在Python中计算协方差和相关性而不使用cov和corr?,python-3.x,numpy,Python 3.x,Numpy,如果不在Python3中使用cov和corr,我们如何计算两个变量之间的相关性和协方差? 最后,我想编写一个返回三个值的函数: 两个变量独立时为真的布尔值 两个变量的协方差 两个变量的相关性 您可以在此处找到相关性和协方差的定义: 我为协方差写了这部分: ''' ''对于协方差,只需减去相应的平均值,然后将向量相乘(使用点积)。(当然,要确定你使用的是样本协方差还是总体协方差估计——如果你有“足够”的数据,差异将很小,但如果有必要,你仍然应该对其进行解释。) 对于相关性,将协方差除以两者的标准

如果不在Python3中使用cov和corr,我们如何计算两个变量之间的相关性和协方差? 最后,我想编写一个返回三个值的函数:

  • 两个变量独立时为真的布尔值
  • 两个变量的协方差
  • 两个变量的相关性
  • 您可以在此处找到相关性和协方差的定义:

    我为协方差写了这部分: '''


    ''

    对于协方差,只需减去相应的平均值,然后将向量相乘(使用点积)。(当然,要确定你使用的是样本协方差还是总体协方差估计——如果你有“足够”的数据,差异将很小,但如果有必要,你仍然应该对其进行解释。)

    对于相关性,将协方差除以两者的标准偏差


    至于两列是否独立,那就不那么容易了。对于两个随机变量,我们只需要$\mathbb{E}\left[(X-\mu\ux)(Y-\mu\uy)\right]=0$,其中$\mu\ux、\mu\uy$是两个变量的平均值。但是,当你有一个数据集,你不是在处理实际的概率分布;您正在处理一个样本。这意味着相关性很可能不是精确的$0$,而是接近$0$的值。这是否“足够接近”将取决于您的样本量以及您愿意做出的其他假设。

    谢谢您的解释。但是你能帮我写代码吗?我将向你展示如何在没有那么多代码的情况下获得相关性:
    (x-x.mean())@(y-y.mean())/x.std()/y.std()/n
    。你可以对协方差做类似的处理(只是不要除以标准差)。
    ans=[]
        mean_x , mean_y = x.mean() , y.mean()
        n = len(x)
        Cov = sum((x - mean_x) * (y - mean_y)) / n
        sum_x = float(sum(x))
        sum_y = float(sum(y))
        sum_x_sq = sum(xi*xi for xi in x)
        sum_y_sq = sum(yi*yi for yi in y)
        psum = sum(xi*yi for xi, yi in zip(x, y))
       num = psum - (sum_x * sum_y/n)
       den = pow((sum_x_sq - pow(sum_x, 2) / n) * (sum_y_sq - pow(sum_y, 2) / n), 0.5)
       if den == 0: return 0
            return num / den