代码之家  ›  专栏  ›  技术社区  ›  psihodelia

python-如何在两个向量之间找到相关性?

  •  2
  • psihodelia  · 技术社区  · 15 年前

    给定两个向量 X Y ,我必须找到它们的相关性,即它们的线性依赖性/独立性。两个向量的维数相等。结果应该是一个从[-1.0.开始的浮点数。1。

    例子:

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

    发现 Y= COR(x,y) 这样 Y 属于 〔1〕1 .

    它应该是一个包含清单理解的简单结构。不允许使用外部库。

    更新:好的,如果dot产品足够,那么下面是我的解决方案:

    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 回复  |  直到 15 年前
        1
  •  3
  •   duffymo    15 年前

    听起来像 dot product 对我来说。

    解出两个向量之间夹角的余弦方程,它总是在范围内[-1,1],你就会得到你想要的。

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

        2
  •  4
  •   Jack    15 年前

    因为射程应该是 [-1, 1] 我认为 Pearson Correlation 对你来说可以。

    同样,点积也可以,但是在计算向量之前,必须对其进行规格化,并且如果也有负值,则可以有-1,1的范围。否则你会得到0,1

        3
  •  2
  •   John D. Cook    15 年前

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

    How to calculate correlation accurately