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

2024-05-16 06:06:49 发布

您现在位置:Python中文网/ 问答频道 /正文

当一个常量列表传递给corrcoef()函数时,似乎corrcoeffromnumpy抛出一个运行时警告,例如下面的代码抛出一个警告:

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])

警告:

/usr/local/lib/python3.6/site-packages/numpy/lib/function_base.py:3003: RuntimeWarning: invalid value encountered in true_divide
  c /= stddev[:, None]

有谁能解释一下当一个列表是常量时为什么会抛出这个错误,以及当一个常量列表被传递给函数时如何防止这个错误。


Tags: 函数代码importnumpy警告列表libusr
1条回答
网友
1楼 · 发布于 2024-05-16 06:06:49

相关性是衡量两个向量在变化时相互跟踪的程度。当一个向量不变时,就不能跟踪相互的变化。

如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

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

相关问题 更多 >