首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么两个矩阵的相关性返回nan?

为什么两个矩阵的相关性返回nan?
EN

Stack Overflow用户
提问于 2017-03-07 16:37:16
回答 1查看 2K关注 0票数 1

考虑以下代码

代码语言:javascript
运行
复制
import numpy as np
from scipy.stats.stats import pearsonr
A = np.ones([5,5])
B = np.ones([5,5])
pearsonr(A.flatten(), B.flatten())

现在我的问题是,为什么最后一行代码返回:

代码语言:javascript
运行
复制
(nan, 1.0)
EN

回答 1

Stack Overflow用户

发布于 2017-03-07 17:59:21

当我运行您的代码时,它会给我以下错误。你不明白这个错误吗?

代码语言:javascript
运行
复制
    In [6]:runfile('C:/Users/a*/.spyder-py3/temp.py', wdir='C:/Users/a*/.spyder-py3')
    (nan, 1.0)
    C:\Anaconda3\lib\site-packages\scipy\stats\stats.py:3029:  
  RuntimeWarning: invalid value encountered in double_scalars
      r = r_num / r_den
    C:\Anaconda3\lib\site-packages\scipy\stats\stats.py:5084:  
RuntimeWarning: invalid value encountered in less
      x = np.where(x < 1.0, x, 1.0)  # if x > 1 then return 1.0

当我更深入地打开stats.py,在peasronr函数中,似乎r_den的值等于零,这导致了在第2558行的值或r (皮尔逊相关系数)的零除法误差,从而导致了代码中的r = NaN

理想情况下,r需要为零,因为两个相同的集合(具有相同的数据)之间的相关性为零。

对于类似的数据,您可以使用自己的函数进行试用,如下所示。来源于这个帖子

代码语言:javascript
运行
复制
import numpy as np
from scipy.stats.stats import pearsonr
import warnings

def pearsonr(X, Y):
    ''' Takes X & Y as numpy array
       returms Pearson Correlation Coefficient 
    '''
    # Normalise X and Y
    X -= X.mean(0)
    Y -= Y.mean(0)
    # Standardise X and Y
    X /= X.std(0)
    Y /= Y.std(0)
    # Compute mean product
    return np.mean(X*Y)

A = np.ones([5,5]).flatten()
B = np.ones([5,5]).flatten()
print pearsonr(A, B)

仍然给出与stats.py pearsonr函数完全相同的误差。

还请注意r = NaN的返回值。

代码语言:javascript
运行
复制
 In [7]: runfile('C:/Users/a*/.spyder-py3/temp.py', wdir='C:/Users/a*/.spyder-py3')
nan
C:/Users/a*/.spyder-py3/temp.py:14:   
RuntimeWarning: invalid value encountered in true_divide
  X /= X.std(0)
C:/Users/amandr/.spyder-py3/temp.py:15:  
RuntimeWarning: invalid value encountered in true_divide
  Y /= Y.std(0)

您可以重写警告,方法是使用try - except在相同值的情况下为r值返回零。

更多关于培生的相关性,这里这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42653563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档