Python numpy.corrcoef()RuntimeWarning:在true_divide中遇到无效值c / = stddev [:,None]

时间:2017-08-26 15:30:45

标签: python numpy correlation

当常量列表传递给corrcoef函数时,来自numpy的{​​{1}}似乎会抛出运行时警告,例如下面的代码会抛出警告:

corrcoef()

警告:

import numpy as np
X = [1.0, 2.0, 3.0, 4.0]
Y = [2, 2, 2, 2]
print(np.corrcoef(X, Y)[0, 1])

任何人都可以解释为什么当其中一个列表不变时它会抛出此错误,以及如何在将常量列表传递给函数时防止此错误。

1 个答案:

答案 0 :(得分:9)

相关性衡量两个向量在变化时相互跟踪的程度。当一个向量没有改变时,你无法跟踪相互的变化。

如OP评论中所述,Pearson的乘积矩相关系数的formulaXY的协方差除以其标准偏差的乘积。由于Y在您的示例中的方差为零,因此其标准偏差也为零。这就是为什么你得到true_divide错误 - 你试图除以零。

注意:从工程角度来看,在Y中的一个条目上添加一个非常小的数量(例如,机器epsilon上方的值),这似乎很诱人,以便绕过零分裂问题。但这在统计上并不可行。即使添加1e-15,也会严重扰乱相关系数,具体取决于您将其添加到的值。

考虑这两种情况之间的区别:

X = [1.0, 2.0, 3.0, 4.0]

tiny = 1e-15

# add tiny amount to second element
Y1 = [2., 2.+tiny, 2., 2.]
np.corrcoef(X, Y1)[0, 1] 
-0.22360679775

# add tiny amount to fourth element
Y2 = [2., 2., 2., 2.+tiny]
np.corrcoef(X, Y2)[0, 1]
0.67082039325

这对统计学家来说可能是显而易见的,但考虑到问题的性质,这似乎是一个相关的警告。