首页 > 解决方案 > Numpy corrcoef 错误

问题描述

我现在正在学习子空间方法来对手写数字进行分类。子空间方法需要一个自相关矩阵,我发现np.corrcoef()可以计算它。

在 的文档中np.corrcoef(),默认情况下它说“每一行代表一个变量,列中有观察值”。所以,我转置了我的输入数据,因为每一行都是一个观察值(4132 obs,784 vars)。

但是,该函数返回一个带有信息的数组或带有转置的 NaN。然后,我无法计算特征值和特征向量。

没有转置,我可以完美地计算,但这不是我想要的((4132,4132)形状数组)。我不明白为什么会这样。

这是我的代码:

X = train[train["label"]==i].iloc[:,1:] 
C = np.corrcoef(X.T)
print(np.isnan(np.min(C))) #-> print True if there are Nan values
eig_val,eig_vec = linalg.eigh(C) #-> returns ValueError
print(eig_val.shape,eig_vec.shape)

X是这样的(4132行,785列)

X 的例子

图像示例

标签: pythonnumpy

解决方案


问题是您的某些行(转置后)没有方差,因此协方差矩阵中有零值(您可以使用 进行检查np.cov)。如果您检查文档np.corrcoef,则相关系数除以协方差矩阵中的元素,因此除以 0,因为您的某些行没有方差。


推荐阅读