import pandas as pd import numpy as np from matplotlib import pyplot as plt import os import math sticsvPath=r'E:\数据文件\3-23DataComplete\CIRCLE\STIM01trian' path2=r'E:\\数据文件\\3-23DataComplete\\CIRCLE\\STIMCrossMartix' #遍历该文件夹下所有.csv文件 def get_file(path): # 创建一个空列表 files = os.listdir(path) list = [] for file in files: if not os.path.isdir(path + file): # 判断该文件是否是一个文件夹 f_name = str(file) # print(f_name) tr = '\\' # 多增加一个斜杠 filename = path + tr + f_name #filename = f_name list.append(filename)#得到所有 return list etm=np.zeros(4096)#第一个电极行为0 td=np.zeros(4096) stiName=get_file(sticsvPath)#得到每个存放总csv数据的文件 for sn in stiName:#循环读取每个stim filename = os.path.basename(sn) # 截取文件名 s = filename.split('\\')[-1] # 不带后缀的文件名(截取) newpath = path2 + '\\' + s # .csv文件的路径+名字 #os.makedirs(newpath) scsv=get_file(sn)#获得该stim下所有.csv文件的名 for cFile in scsv:#一个.csv的文件,一个刺激时间点下的4096个电极的0-1序列 k = 0 data = pd.read_csv(cFile, header=None) data = np.array(data) data = np.transpose(data) csvname = os.path.basename(cFile) # 截取文件名 csv = csvname.split('.')[0] # 不带后缀的文件名(截取) savePath=newpath +'\\'+csv for i in data: ref=i#参考电极 ind1 = [d for d, x in enumerate(ref) if x == 1] # 找到电极的位置 maxvalueTrain=[] timeDelayTrain=[] if len(ind1) == 0: # 如果电极没有spike,则为0 maxvalueTrain = np.zeros(4096)#互相关系数矩阵 timeDelayTrain = np.zeros(4096)#延迟时间矩阵 else: for j in data:#目标电极 target=j ind2 = [d for d, x in enumerate(target) if x == 1] # 找到电极的位置 spikebin = np.array(range(100)) for s1 in ind1:#循环参考电极中1的位置 if s1-50<0:#参考电极的位置<50 cha = abs(s1 - 50)#补充50-s1长度的0 cha1 = np.zeros(cha) cha1 = np.r_[cha1, target[:s1 + 50]]#填充0与0-目标位置+50 else: if s1 + 50 > 200: cha1 = np.zeros(s1 - 150)#右边补充0的长度 cha1 = np.r_[target[s1 - 50:], cha1] else: cha1 = target[s1 - 50:s1 + 50] spikebin=np.row_stack((spikebin,cha1))#将每次spike得到的序列添加到下一行 spikebin = np.delete(spikebin, 0, axis=0)#得到该参考电极的每个spike100长度的序列 a = [] for b in range(100): p = spikebin[:, b] # 取出每一列进行相加 a.append(sum(p)) a = np.array(a) if len(ind2) == 0:#如果目标电极没有spike,则不需要归一化 a = a else: c = math.sqrt(len(ind1) * len(ind2)) a = a / c maxvalue=max(a) maxvalueTrain.append(maxvalue) # 找到参考电极与目标电极归一化后最大的数值 maxind= [d for d, x in enumerate(a) if x == maxvalue] # 找到归一化后最大值的位置 timeDelay=maxind[0]-50#计算最大值与中间位置之间的差值为延迟时间 timeDelayTrain.append(timeDelay) timeDelayTrain = np.array(timeDelayTrain) maxvalueTrain=np.array(maxvalueTrain)#所有目标电极的最大值 etm = np.row_stack((etm, maxvalueTrain))#将每个电极的最大值添加一行 td=np.row_stack((td,timeDelayTrain))#将每个延迟时间添加一行 #print(i) k=k+1 print(k) spiketrainAll1 = pd.DataFrame(data=etm[1:]) spiketrainAll1.to_csv(savePath+'maxMatrix.csv', index=False, header=None) # 进行数据的保存 spiketrainAll2 = pd.DataFrame(data=td[1:]) spiketrainAll2.to_csv(savePath+'TDMatrix.csv', index=False, header=None)