使用np.corrcoef计算数组相关系数报错:拼接轴维度不匹配
解决numpy计算x与y相关系数的维度错误问题
错误原因
np.corrcoef 默认参数 rowvar=True,意味着每行代表一个变量,每列代表一次观测。你的x是(536,9),即536次观测、9个变量;y是(536,),即536次观测。直接传入时,numpy会把x按行视为9个变量(每行长度9),y被当作1个变量但长度是536,拼接时维度不匹配,导致报错。
两种可行解决方案
方案1:设置rowvar=False,同时将y转为二维数组
将rowvar设为False,表示每列代表一个变量,每行代表一次观测,同时把y从一维数组转为(536,1)的二维数组,和x的行维度匹配:
import numpy as np # 假设x和y已定义 y_2d = y.reshape(-1, 1) # 转为(536,1) corr_matrix = np.corrcoef(x, y_2d, rowvar=False)
此时得到的相关系数矩阵是(10,10),前9行9列是x各特征间的相关系数,最后一行/列是每个特征与y的相关系数。
方案2:转置x,调整y的形状为行向量
保持rowvar=True默认值,将x转置为(9,536)(9个变量,536次观测),y转为(1,536)的行向量:
import numpy as np x_transposed = x.T # 转为(9,536) y_row = y.reshape(1, -1) # 转为(1,536) corr_matrix = np.corrcoef(x_transposed, y_row)
得到的结果和方案1一致,只是矩阵的行/列顺序对应转置后的变量顺序。
提取特征与y的相关系数
如果只需要x每个特征和y的相关系数,可以直接从结果中提取:
# 方案1/2通用提取方式 feature_y_corr = corr_matrix[:9, 9]
内容的提问来源于stack exchange,提问作者the.lotuseater
相关产品推荐
相关产品推荐

