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

Python使用pyedflib读取EDF文件时出现数组索引错误是什么原因?

错误根因

你触发的IndexError核心原因是存储多通道脑电信号的数组维度与使用的索引不匹配:

  1. 当前sigbufs初始化代码为sigbufs=np.zeros((f.getNSamples()[0])),生成的是仅包含采样点维度的1维数组,形状为(单通道采样点数,)
  2. 后续循环赋值时你使用了sigbufs[i,:]二维索引(第一维表示通道序号,第二维表示采样点位置),1维数组无法接受二维索引,直接触发报错。
修复步骤

修改3处核心逻辑即可解决问题:

  • 调整sigbufs初始化逻辑,生成适配多通道存储的二维数组:
# 第一维为通道总数n,第二维为每个通道的采样点数
sigbufs = np.zeros((n, f.getNSamples()[0]))
  • 取消函数末尾return sigbufs的注释,否则函数返回None,后续绘图调用会报错
  • 删除存在越界风险的采样率读取代码:sample_signal=f.getSampleFrequency(chn=n),通道索引范围是0到n-1,传入n会触发索引越界,不需要该参数可直接删除
完整修正代码
import pyedflib
import numpy as np
import os
import matplotlib.pyplot as plt

def upload_brain_wave_file():
    brain_wave="C:\\Users\\shafi\\PycharmProjects\\pyHrv\\SN001.edf"
    f= pyedflib.EdfReader(brain_wave)
    n=f.signals_in_file
    print("signal numbers:",n)
    signal_lebels = f.getSignalLabels()
    print("Labels:", signal_lebels,len(signal_lebels),sep="\n==========\n")
    signal_headers=f.getSignalHeader(7)
    print("Header:",signal_headers,len(signal_headers),sep="\n===\n")
    # 修正:初始化二维数组存储多通道信号
    sigbufs = np.zeros((n, f.getNSamples()[0]))
    timestart=f.getFileDuration()
    print('timestart',timestart)
    for i in np.arange(n):
        sigbufs[i,:]=f.readSignal(i)
        print('ooo',sigbufs)
        label= f.getLabel(i)
        sample_rate=f.getSampleFrequency(i)
        d=list(enumerate(sigbufs[i,0:sample_rate]))
        print('da',d)
    # 修正:取消返回注释
    return sigbufs

sigbufs=upload_brain_wave_file()
print(sigbufs)
plt.plot(*np.array(list(enumerate(sigbufs[0,0:256]))).T, linestyle='-', linewidth=1,color='dodgerblue')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:03