Python计算相关性系数报错ValueError:数组维度不匹配求助
解决np.corrcoef触发的ValueError问题
我来帮你分析问题根源,以及给出修复方案:
错误原因拆解
你遇到的ValueError本质是参与相关性计算的两个数组维度/长度不匹配,具体来自这几个代码问题:
- 你对
x执行了np.array(x).astype(np.float)转换,但没有把转换后的结果赋值回x,所以x始终是字符串类型的列表,不是可用于计算的数值数组。 - 循环里错误使用了
x[i]和da[i]:x是当前循环截取的67个元素的片段,x[i]只是这个片段里的第i个单个元素(字符串),而da[i]是包含67个数值的数组,两者长度完全不一致,自然无法计算相关性。 - 多余的
np.array(da).astype(np.float)没有赋值,不过这一步其实没必要,因为da里的元素已经是np.loadtxt加载的数值数组。
修正后的代码
下面是修复后的完整代码,我标注了关键修改点:
import pandas as pd import numpy as np import seaborn import scipy import matplotlib.pyplot as plt da = [] outputFile = open("core.txt", "w") f = open('17059output.txt', "r") lines = f.readlines() for i in range(0, 28): # 1. 截取x的片段并转换为数值数组,赋值回x x_segment = lines[6 + (24*i) : 73 + (24*i)] x = np.array(x_segment).astype(np.float) # 2. 加载对应da文件并添加到列表 da_array = np.loadtxt(f'17059-2016-{i+1}-{i+4}.txt', delimiter=",", usecols=2) da.append(da_array) # 3. 计算整个x数组和当前da数组的相关性系数 # corrcoef返回相关矩阵,[0,1]位置是两个变量的相关系数 corr_matrix = np.corrcoef(x, da[i]) corr_coefficient = corr_matrix[0, 1] print(f"第{i+1}组数据:") print(f"x数组长度:{len(x)},da数组长度:{len(da[i])}") print(f"相关性系数:{corr_coefficient}\n") # 将结果写入文件 outputFile.write(f"{i} - 相关性系数:{corr_coefficient}\n") # 关闭文件释放资源 f.close() outputFile.close()
关键修改说明
- 显式将截取的字符串片段转换为数值数组并赋值,确保
x是可用于计算的数值类型。 - 直接使用整个
x数组和da[i]数组计算相关性,保证两者长度一致(都是67个元素)。 - 从
corrcoef返回的相关矩阵中提取实际的相关系数([0,1]位置),而非直接打印矩阵。 - 添加了文件关闭操作,避免资源泄漏。
如果你想用scipy.stats.pearsonr计算,只需要把np.corrcoef相关代码替换成:
corr_coefficient, p_value = scipy.stats.pearsonr(x, da[i]) print(f"相关性系数:{corr_coefficient},p值:{p_value}\n")
内容的提问来源于stack exchange,提问作者Rahan Öztürk
相关产品推荐
相关产品推荐

