You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python手动实现协方差报IndexError: list index out of range错误如何解决

错误含义

IndexError: list index out of range 表示你尝试访问的数组/列表索引超出了它的实际长度,比如一个长度为2的列表,你尝试取下标2就会触发这个错误。

代码问题汇总
  • 均值计算逻辑完全错误:你现在遍历的是数据集的行,且每次循环都重新初始化mean_list为空,循环结束后mean_list仅存最后一行的均值,长度只有1。后续你用列索引j去取mean_list[j]时,只要j>=1就会超出下标范围,这是触发报错的直接原因。另外协方差计算要求的是每一列特征的均值,你现在按行求和计算均值的逻辑也不符合数学定义。
  • 协方差计算的遍历范围错误:计算两个特征的协方差需要遍历所有样本(即所有行),你写的range(mat.shape[1])是遍历列数,会导致行索引i的取值范围不符合要求,甚至额外触发行下标越界。
  • 标准差计算逻辑无效:你计算的标准差既没有存储结果,协方差矩阵计算本身也不需要用到标准差,这部分代码属于冗余内容,如果你后续要做相关矩阵计算再保留即可。
  • 没有构建协方差矩阵的逻辑:你只是打印了每个协方差值,没有存入预设的cov列表中,最后无法得到完整的协方差矩阵。
修复后的代码
import pandas as pd

df = pd.read_csv('C:/Users/User/Downloads/Admission_Predict.csv')
df = df.sample(frac=1)

mat = df.to_numpy()
row_cnt = mat.shape[0]
col_cnt = mat.shape[1]
cov = [[0]*col_cnt for _ in range(col_cnt)] # 初始化协方差矩阵

# 按列计算每个特征的均值
mean_list = []
for j in range(col_cnt):
    col_sum = sum(mat[i][j] for i in range(row_cnt))
    mean_list.append(col_sum / row_cnt)

# 计算协方差矩阵
for j in range(col_cnt):
    for k in range(col_cnt):
        temp_sum = 0
        for i in range(row_cnt):
            temp_sum += (mat[i][j] - mean_list[j]) * (mat[i][k] - mean_list[k])
        cov[j][k] = temp_sum / (row_cnt - 1)
        print(f"cov[{j}][{k}] = {cov[j][k]}")

内容的提问来源于stack exchange,提问作者meloqq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:24:00