Python - 如何找到两个向量之间的相关性?

时间:2010-06-15 12:25:21

标签: python algorithm math list-comprehension

给定两个向量 X Y ,我必须找到它们的相关性,即它们的线性相关性/独立性。两个向量具有相同的维度。结果应该是[-1.0 .. 1.0]的浮点数。

示例:

X=[-1, 2,    0]
Y=[ 4, 2, -0.3]

查找 y = cor(X,Y),使 y 属于 [ - 1.0 .. 1.0]

它应该是一个涉及列表理解的简单构造。不允许使用外部库。

更新:好的,如果点积足够,那么这是我的解决方案:

nX = 1/(sum([x*x for x in X]) ** 0.5)
nY = 1/(sum([y*y for y in Y]) ** 0.5)
cor = sum([(x*nX)*(y*nY)  for x,y in zip(X,Y) ])

正确?

3 个答案:

答案 0 :(得分:4)

由于范围应为[-1, 1],我认为Pearson Correlation可以满足您的目的。

此外,dot-product可以正常工作,但你必须在计算之前对矢量进行标准化,并且如果你还有负值,你可以得到-1,1范围。否则你会得到0,1

答案 1 :(得分:3)

对我来说听起来像dot product

求解两个向量之间角度余弦的等式,它总是在[-1,1]范围内,你就可以得到你想要的。

它等于点积除以两个矢量的大小。

答案 2 :(得分:2)

不要假设,因为公式在代数上是正确的,因为它在代码中的直接实现是有效的。某些相关定义可能存在数值问题。

请参阅How to calculate correlation accurately