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)