我有以下代码来使用两种不同的方式生成数字系列来计算相关系数。它无法用于第一种方式(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)
是否有某种方法可以“转换”生成我缺少的系列的第一种方式中的数字?
最佳答案
问题是 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
正在思考
Each row of x represents a variable, and each column a single observation of all those variables
(引自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. ]])
关于python - 使用 np.random.rand 的 PIL 逊相关失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52260838/