Python &引用;“阵列的事件太多”;

Python &引用;“阵列的事件太多”;,python,scikit-learn,Python,Scikit Learn,我试图在代码中实现连接功能,但不确定如何修复此错误代码 freqs作为数组返回,除非我将其转换为np.array,否则不能在con_频带内工作。沿着这条路走有解决办法吗 这是我的代码,直到出现错误为止 import mne import matplotlib.pyplot as plt import numpy as np from mne.time_frequency import psd_welch from mne.connectivity import spectral_connect

我试图在代码中实现连接功能,但不确定如何修复此错误代码

freqs作为数组返回,除非我将其转换为np.array,否则不能在con_频带内工作。沿着这条路走有解决办法吗

这是我的代码,直到出现错误为止

import mne
import matplotlib.pyplot as plt
import numpy as np

from mne.time_frequency import psd_welch
from mne.connectivity import spectral_connectivity


from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, plot_confusion_matrix
from sklearn.metrics import confusion_matrix
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import FunctionTransformer
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import KFold, cross_val_predict

#Importing data
pre = mne.io.read_raw_eeglab('Subject31pre.set')
prop = mne.io.read_raw_eeglab('Subject33prop.set')

#Create events in regular intervals, used as markers to generate epochs
preEvents = mne.make_fixed_length_events(
    pre, id=1, start=0, stop=None, duration=1.0, first_samp=True, overlap=0.0)
propEvents = mne.make_fixed_length_events(
    prop, id=2, start=0, stop=None, duration=1.0, first_samp=True, overlap=0.0)

#Plotting of Power Spectral Density
pre.plot(duration=20, n_channels=64)
pre.plot_psd()
prop.plot(duration=20, n_channels=64)
prop.plot_psd()

#Epoch parameters
event_id = None
tmin = 0
tmax = 1
baseline = None
picks = None
reject = None

#Definition of epochs, for both pre and prop data
preEpochs = mne.Epochs(pre, preEvents, event_id, tmin, tmax, proj=True, baseline=baseline, picks=picks, reject=reject, preload=True)
print(preEpochs)
propEpochs = mne.Epochs(prop, propEvents, event_id, tmin, tmax, proj=True, baseline=baseline, picks=picks, reject=reject, preload=True)
print(propEpochs)

#Merge all epochs into one variable
epochsAll = mne.concatenate_epochs([preEpochs, propEpochs])
print(type(epochsAll))

def eeg_connectivity(epochs):
    FREQ_BANDS = {"delta": [0.5, 4.5],
              "theta": [4.5, 8.5],
              "alpha": [8.5, 11.5],
              "sigma": [11.5, 15.5],
              "beta": [15.5, 30]}
    print("inside: ",type(epochs))


    sfreq = epochs.info['sfreq']

    con, freqs, times, n_epochs, n_tapers = \
        spectral_connectivity(epochs, method='coh', mode='multitaper', sfreq=sfreq,
        fmin=0.5, fmax=30, faverage=True, n_jobs=1)

    freqsNd = np.array(freqs)

    X = []
    for fmin, fmax in FREQ_BANDS.values():
        con_band = con[:, :, (freqsNd >= fmin) & (freqsNd < fmax)].mean(axis=-1)
        X.append(con_band.reshape(len(con), -1))  # -1

    return np.concatenate(X, axis=-1)
导入mne
将matplotlib.pyplot作为plt导入
将numpy作为np导入
从mne.time\u frequency导入psd\u welch
从mne.connectivity导入频谱连接
从sklearn.employ导入随机林分类器
从sklearn.metrics导入准确度得分,绘制混乱矩阵
从sklearn.metrics导入混淆矩阵
从sklearn.pipeline导入make_pipeline
从sklearn.preprocessing导入FunctionTransformer
从sklearn.model_选择导入分层折叠
从sklearn.model_选择导入KFold、cross_val_predict
#导入数据
pre=mne.io.read\u raw\u eeglab('Subject31pre.set')
prop=mne.io.read\u raw\u eeglab('Subject33prop.set')
#定期创建事件,用作生成纪元的标记
preEvents=mne.make\u固定长度\u事件(
pre,id=1,start=0,stop=None,duration=1.0,first\u samp=True,overlap=0.0)
propEvents=mne.make\u固定长度\u事件(
prop,id=2,start=0,stop=None,duration=1.0,first\u samp=True,overlap=0.0)
#功率谱密度的绘制
预绘图(持续时间=20,n_通道=64)
预绘图(psd)
道具图(持续时间=20,n_通道=64)
项目图(psd)
#历元参数
事件id=无
tmin=0
tmax=1
基线=无
选择=无
拒绝=无
#前数据和道具数据的时代定义
preEpochs=mne.Epochs(pre,preEvents,event_id,tmin,tmax,proj=True,baseline=baseline,picks=picks,reject=reject,preload=True)
印刷品(预印刷品)
propEpochs=mne.Epochs(prop,propEvents,event_id,tmin,tmax,proj=True,baseline=baseline,picks=picks,reject=reject,preload=True)
印刷品(propEpochs)
#将所有纪元合并到一个变量中
epochall=mne.concatenate_epochs([preEpochs,propEpochs])
打印(类型(epochsAll))
def eeg_连接(历代):
频带={“δ”:[0.5,4.5],
“θ”:[4.5,8.5],
“阿尔法”:[8.5,11.5],
“西格玛”:[11.5,15.5],
“beta”:[15.5,30]}
打印(“内:”,类型(年代))
sfreq=epochs.info['sfreq']
con、freqs、times、n_时代、n_锥度=\
频谱连接(EPOCH,方法='coh',模式='multitaper',sfreq=sfreq,
fmin=0.5,fmax=30,faverage=True,n_jobs=1)
freqsNd=np.数组(freqs)
X=[]
对于fmin,fmax在频带中。值()
con_band=con[:,:,(freqsNd>=fmin)和(freqsNd
收到的错误如下:

File "", line 71, in eeg_connectivity
    con_band = con[:, :, (freqsNd >= fmin) & (freqsNd < fmax)].mean(axis=-1)
IndexError: too many indices for array: array is 3-dimensional, but 4 were indexed
eeg_连接中第71行的文件“” con_band=con[:,:,(freqsNd>=fmin)和(freqsNd
我猜通过调用:
(freqsNd>=fmin)和(freqsNd
您将收到一个索引数组,而不是在调用中选择给定索引所需的原始整数。 您可以尝试:

selected = freqsNd[(fmin <= freqsNd) & (freqsNd< fmax)] 
如果没有,请检查
freknd
shape
freknd.shape

con_band = con[:, :, selected].mean(axis=-1)