使用np.random.rand失败的梨子相关

时间:2018-09-10 15:13:29

标签: python numpy

我有以下代码使用两种不同的方式生成数字序列来计算相关系数。它无法以第一种方式工作(corr_coeff_pearson),但是会以第二种方式工作(corr_coeff_pearson_1)。为什么会这样呢?在这两种情况下,变量都是'numpy.ndarray'类的。

import numpy as np

np.random.seed(1000)

inp_vct_lngt = 5

X = 2*np.random.rand(inp_vct_lngt,1)
y=4+3*X+np.random.randn(inp_vct_lngt,1)
print(type(X))

corr_coeff_pearson=0
corr_coeff_pearson = np.corrcoef(X,y)
print("Pearson Correlation:")
print(corr_coeff_pearson)

X_1 = np.random.randint(0,50,5)
y_1 = X_1 + np.random.normal(0,10,5)
print(type(X_1))

corr_coeff_pearson_1 = np.corrcoef(X_1,y_1)
print("Pearson Correlation:")
print(corr_coeff_pearson_1)

是否有某种方法可以以第一种生成我所缺少的序列的方式“转换”数字?

1 个答案:

答案 0 :(得分:1)

问题在于Xy是二维的:

>>> X
array([[1.9330627 ],
       [0.19204405],
       [0.21168505],
       [0.65018234],
       [0.83079548]])
>>> y
array([[8.60619212],
       [6.09210226],
       [5.33097283],
       [5.71649684],
       [5.18771916]])

所以corrcoef在思考

  

x的每一行代表一个变量,每一列代表所有这些变量

(引自docs

您可以做的就是将二维尺寸展平:

>>> np.corrcoef(X.flatten(),y.flatten())
array([[1.        , 0.84196446],
       [0.84196446, 1.        ]])

或使用rowvar=False

>>> np.corrcoef(X,y,rowvar=False)
array([[1.        , 0.84196446],
       [0.84196446, 1.        ]])