Python numpy.corrcoef()运行警告:在TRUE_Divide c/=stddev[:,None]中遇到无效值

Python numpy.corrcoef() RuntimeWarning: invalid value encountered in true_divide c /= stddev[:, None](Python numpy.corrcoef()运行警告:在TRUE_Divide c/=stddev[:,None]中遇到无效值)
本文介绍了Python numpy.corrcoef()运行警告:在TRUE_Divide c/=stddev[:,None]中遇到无效值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

似乎在将常量列表传递给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]

有人能解释为什么当其中一个列表是常量时引发此错误,以及当常量列表传递给函数时如何防止此错误。

推荐答案

相关性是衡量两个向量在更改时彼此跟踪的程度。如果一个向量未更改,则无法跟踪相互更改。

如OP评论中所述,皮尔逊乘积矩相关系数的formula除以XY的协方差的标准差的乘积。由于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

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

这篇关于Python numpy.corrcoef()运行警告:在TRUE_Divide c/=stddev[:,None]中遇到无效值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)