Python:两个(相同/不相同)数组之间的Pearson相关性返回的值超出范围

Python:两个(相同/不相同)数组之间的Pearson相关性返回的值超出范围,python,numpy,pyspark,statistics,pearson-correlation,Python,Numpy,Pyspark,Statistics,Pearson Correlation,在计算两个相同阵列之间的相关性时,相关性(本应为1)大于1。相关性值超出[-1,1]范围是否有任何原因 Im使用numpy计算协方差和标准差 将numpy导入为np a=[1,2,3,4] 协方差=np.cov(a,a)[0][1] 标准偏差=(np.std(a)) 而相关性范围为[-1,1],因此上述值应小于1 已编辑: 当我在pyspark数据帧上使用UDF时,在np.cov()函数中添加bias=True。我仍然得到超出范围的相关性 df=sc.parallelize( [([0.0,

在计算两个相同阵列之间的相关性时,相关性(本应为1)大于1。相关性值超出[-1,1]范围是否有任何原因

Im使用numpy计算协方差和标准差

将numpy导入为np
a=[1,2,3,4]
协方差=np.cov(a,a)[0][1]
标准偏差=(np.std(a))
而相关性范围为[-1,1],因此上述值应小于1

已编辑

当我在pyspark数据帧上使用UDF时,在np.cov()函数中添加bias=True。我仍然得到超出范围的相关性

df=sc.parallelize(
[([0.0, 0.0, 0.0, 0.0, 0.066, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
,[0.0, 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0, 0.0, 0.0, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
) , ([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.411666666666666, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.01, 0.0, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
) , ([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.2733333333333332, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.29, 
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])]
).toDF([“array1”、“array2”])
@psf.udf(FloatType())
def calc_cov(val1、val2):
将numpy作为np导入
val=np.cov(val1,val2,bias=True)[0][1]
返回浮动(val)
@psf.udf(FloatType())
def计算标准偏差(val1):
将numpy作为np导入
val=np.std(val1)
返回浮动(val)
df=df.withColumn(
“协方差”,psf四舍五入(计算公式(psf列(“array1”)、psf列(“array2”)、4)
).withColumn(
“特殊功能1”,psf圆形(计算标准开发(psf柱(“阵列”),4)
).withColumn(
“sd feat2”,psf.round(计算标准开发(psf.col)(“array2”)),4)
).withColumn(
“相关性”,psf轮(psf列(“协方差”)/(psf列(“sd_feat1”)*psf列(“sd_feat2”)),4)
).withColumn(
“皮尔逊区”,psf圆形(整数(1)-(psf列(“相关性”)),4)
)

运行上述代码段时,您会注意到这些数组的协方差大于1。

在更新的示例中,这些错误完全是由于舍入操作引入的错误传播造成的。@merv在删除舍入操作后,错误也会出现。当我使用这三对对以numpy计算它们时,它们都满足
np.isclose
,而不是1。在更新的示例中,这些错误完全是由于舍入操作引入的错误传播造成的。@merv在删除舍入操作后,错误也在那里。当我使用这三对对以numpy计算它们时,它们都满足
np。与1相比,isclose
correlation = covariance / (stddeviation * stddeviation)

covariance = 1.6666666666666665

stddeviation = 1.118033988749895

correlation = 1.333333333333333