首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中计算协方差

在Python中计算协方差
EN

Stack Overflow用户
提问于 2015-11-19 15:09:15
回答 2查看 3.1K关注 0票数 1

我想知道是否有人可以给我一些关于如何在Python中计算协方差的提示;我不想使用numpy中的任何东西。我只想学习如何手动完成这项工作,并练习for循环。

基本上,我想计算的协方差为:

代码语言:javascript
复制
X = [1,2]
Y = [1,2,3]
P = [[0.25,0.25,0.0], [0.0, 0.25, 0.25]]

Mean of X: 1.5
Mean of Y: 2

这些值取自:https://onlinecourses.science.psu.edu/stat414/node/109

其结果应为0.25。

我已经在嵌套的for循环中遍历过X、Y和P,但不知道可以使用的其他方法来组合它们。

我基本上想要做这样的计算:

代码语言:javascript
复制
(1-1.5)(1-2)(0.25) + (1-1.5)(2-2)(0.25) +  ..... + (2-1.5)(3-2)(0.25)
EN

回答 2

Stack Overflow用户

发布于 2015-11-19 15:28:59

要计算协方差,您需要如下代码,它有一个嵌套循环,遍历每个列表,并使用协方差公式累加协方差。

代码语言:javascript
复制
# let's get the mean of `X` (add all the vals in `X` and divide by
# the length
x_mean = float(sum(X)) / len(X)

# now, let's get the mean for `Y`
y_mean = float(sum(Y)) / len(Y)

# initialize the covariance to 0 so we can add it up
cov = 0

# we'll use a nested loop structure -- the outer loop can be through `Y`
# or `X`, it doesn't matter in this case
# we'll use python's `enumerate`, which lets us iterate through the `list`
# using a `tuple` that contains (the_current_index, the_current_element),
# or in `C`/`Java` terms, `(i, arr[i])`
for y_idx,y in enumerate(Y):
    for x_idx,x in enumerate(X):

        # the covariance is defined by the following equation
        # you don't need to loop through `P` -- the outer list
        # contains 2 elements, which is the size of `X`, and
        # the inner list contains 3 elements, which is the size of `Y`
        cov += (x - x_mean) * (y - y_mean) * P[x_idx][y_idx]

print cov # => 0.25
票数 3
EN

Stack Overflow用户

发布于 2015-11-19 15:36:35

Python在itertools中的product函数也可以在这里提供帮助,它可以与enumerate结合使用,以返回P所需的索引,如下所示:

代码语言:javascript
复制
from itertools import product

X = [1, 2]
Y = [1, 2, 3]
P = [[0.25,0.25,0.0], [0.0, 0.25, 0.25]]

mean_x = float(sum(X) / len(X))
mean_y = float(sum(Y) / len(Y))

print sum((x[1] - mean_x) * (y[1] - mean_y) * P[x[0]][y[0]] for x, y in product(enumerate(X), enumerate(Y)))

给出结果:

代码语言:javascript
复制
0.25
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33797330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档