我有以下代码使用两种不同的方式生成数字序列来计算相关系数。它无法以第一种方式工作(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)
是否有某种方法可以以第一种生成我所缺少的序列的方式“转换”数字?
答案 0 :(得分:1)
问题在于X
和y
是二维的:
>>> 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. ]])