Python使用pyedflib读取EDF文件时出现数组索引错误是什么原因?
错误根因
你触发的IndexError核心原因是存储多通道脑电信号的数组维度与使用的索引不匹配:
- 当前
sigbufs初始化代码为sigbufs=np.zeros((f.getNSamples()[0])),生成的是仅包含采样点维度的1维数组,形状为(单通道采样点数,) - 后续循环赋值时你使用了
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
相关产品推荐
相关产品推荐

