Python 数据帧的np.corrcoef行为

Python 数据帧的np.corrcoef行为,python,pandas,numpy,series,Python,Pandas,Numpy,Series,我使用我为计算每个组的一系列总和而构建的脚本观察到以下情况: In [291]: sums_per_group2 Out[291]: test_group control_group one 4551.658544 4449.3 three 3770.712771 3430.5 two 9328.171538 8673.9 In [292]: sums_per_group2.shape Out[292]: (3,

我使用我为计算每个组的一系列总和而构建的脚本观察到以下情况:

In [291]: sums_per_group2
Out[291]: 
        test_group  control_group
one    4551.658544         4449.3
three  3770.712771         3430.5
two    9328.171538         8673.9

In [292]: sums_per_group2.shape
Out[292]: (3, 2)

In [293]: np.corrcoef(sums_per_group2)
Out[293]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]]) 

In [294]: np.corrcoef(sums_per_group2.values)
Out[294]: 
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

In [295]: sums_per_group2.values.shape  
Out[295]: (3, 2)

In [296]:   np.corrcoef(sums_per_group2.iloc[:,0],sums_per_group2.iloc[:,1])
Out[296]: 
array([[ 1.        ,  0.99853641],
       [ 0.99853641,  1.        ]])  

In [296]:   sums_per_group2.iloc[:,0].shape
Out[296]: (3,)

In [297]:   sums_per_group2.iloc[:,1].shape
Out[297]: (3,)
正如您所看到的,np.corrcoef()的任何输入之间的形状都非常精确


有人能帮我理解这一点吗?

如果要将其作为2d数组传递,需要将
sum\u per\u group2
变量进行转置:

np.corrcoef(sum_per_group2.T)
# array([[ 1.        ,  0.99853641],
#        [ 0.99853641,  1.        ]])
以下是关于
x
参数的文档:

x:数组_-like 包含多个变量和观测值的一维或二维数组。 每行
x
代表一个变量,每列代表一个变量 观察所有这些变量。另请参见下面的
rowvar

传入二维数组时,请确保列为“观察”,行为“变量”或“特征”;计算行之间的相关性。或设置
rowvar=0

np.corrcoef(sum_per_group2, rowvar=0)
#array([[ 1.        ,  0.99853641],
#       [ 0.99853641,  1.        ]])


如果不转置2d数组,该方法会将行解释为向量,因此在前几种情况下,它会计算所有行组合的相关系数,因为每一行的长度为2向量,所以当您尝试用两点拟合直线时,会得到所有1作为系数(始终完美拟合).

如果要将其作为2d数组传递,则需要将
sum\u per\u group2
变量转置:

np.corrcoef(sum_per_group2.T)
# array([[ 1.        ,  0.99853641],
#        [ 0.99853641,  1.        ]])
以下是关于
x
参数的文档:

x:数组_-like 包含多个变量和观测值的一维或二维数组。 每行
x
代表一个变量,每列代表一个变量 观察所有这些变量。另请参见下面的
rowvar

传入二维数组时,请确保列为“观察”,行为“变量”或“特征”;计算行之间的相关性。或设置
rowvar=0

np.corrcoef(sum_per_group2, rowvar=0)
#array([[ 1.        ,  0.99853641],
#       [ 0.99853641,  1.        ]])


如果不转置2d数组,该方法会将行解释为向量,因此在前几种情况下,它会计算所有行组合的相关系数,因为每一行的长度为2向量,所以当您尝试用两点拟合直线时,会得到所有1作为系数(始终完美拟合).

感谢您对函数工作原理的澄清,我错过了向量行。因此,现在这是有意义的,我想知道为什么这个错误,能够系统地产生一个1相关系数。但我没有考虑我的体型。现在我应该试着修改它,以更好地测试函数行为。感谢对函数工作原理的澄清,我错过了作为向量的行。因此,现在这是有意义的,我想知道为什么这个错误,能够系统地产生一个1相关系数。但我没有考虑我的体型。现在,我应该尝试更改它以更好地测试函数行为。