【发布时间】:2020-11-20 15:59:20
【问题描述】:
所以我有这个 pickle 文件 second.pkl,其中包含来自我的神经网络输出层的尖峰时间结果。我正在尝试使用函数读取文件,以便它返回列表或数组中的神经元数和尖峰时间。我已经尝试了下面的代码,但我遇到了问题。
resultsFileName = "output/second.pkl"
testStartTime = 8260
def readResultsFile(testStartTime):
timeResults = [[],[],[]]
fileHandle = open(resultsFileName, 'rb')
inputLine = fileHandle.readline()
while (inputLine != ""):
dataStrings = inputLine.split()
neuronNumber = int (dataStrings[0])
spikeTime = float(dataStrings[1])
if (spikeTime >= testStartTime):
timeResults[neuronNumber] = timeResults[neuronNumber]+ [spikeTime]
inputLine = fileHandle.readline()
fileHandle.close()
return timeResults
更新: 我在另一个函数中使用了pickle.load
def printPklSpikes(fileName):
testTimeResults = [[],[],[]]
fileHandle = open(fileName, 'rb')
neoObj = pickle.load(fileHandle)
segments = neoObj.segments
segment = segments[0]
spikeTrains = segment.spiketrains
neurons = len(spikeTrains)
for neuronNum in range (0,neurons):
if (len(spikeTrains[neuronNum])>0):
spikes = spikeTrains[neuronNum]
for spike in range (0,len(spikes)):
testTimeResults = neuronNum, spikes[spike]
fileHandle.close()
return testTimeResults
但函数最终只返回最后一个神经元编号和尖峰时间
pickle 文件如下所示:
Block with 1 segments
name: 'population8'
description: 'Population "population8"\n Structure : {\'name\': \'Line\', \'parameters\': {\'dx\': 1.0, \'x0\': 0.0, \'y\': 0.0, \'z\': 0.0}}\n Local cells : 4\n Cell type : {\'name\': \'IF_cond_exp\', \'default_parameters\': {\'v_rest\': -65.0, \'cm\': 1.0, \'tau_m\': 20.0, \'tau_refrac\': 0.1, \'tau_syn_E\': 5.0, \'tau_syn_I\': 5.0, \'e_rev_E\': 0.0, \'e_rev_I\': -70.0, \'v_thresh\': -50.0, \'v_reset\': -65.0, \'i_offset\': 0.0}, \'default_initial_values\': {\'v\': -65.0, \'gsyn_exc\': 0.0, \'gsyn_inh\': 0.0}, \'parameters\': {\'v_rest\': <larray: base_value=-65.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'cm\': <larray: base_value=1.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_m\': <larray: base_value=20.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_refrac\': <larray: base_value=0.1 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_syn_E\': <larray: base_value=5.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_syn_I\': <larray: base_value=5.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'e_rev_E\': <larray: base_value=0.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'e_rev_I\': <larray: base_value=-70.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'v_thresh\': <larray: base_value=-50.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'v_reset\': <larray: base_value=-65.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'i_offset\': <larray: base_value=0.0 shape=(4,) dtype=<class \'float\'>, operations=[]>}}.name\n ID range : 2853-2856\n First cell on this node:\n ID: 2853\n {}'
annotations: {'size': 4,
'first_index': 0,
'last_index': 4,
'first_id': 2853,
'last_id': 2856,
'label': 'population8',
'simulator': 'NEST',
'dt': 1.0,
'mpi_processes': 1}
rec_datetime: datetime.datetime(2020, 11, 18, 11, 25, 53, 792667)
# segments (N=1)
0: Segment with 4 spiketrains
name: 'segment000'
description: 'Population "population8"\n Structure : {\'name\': \'Line\', \'parameters\': {\'dx\': 1.0, \'x0\': 0.0, \'y\': 0.0, \'z\': 0.0}}\n Local cells : 4\n Cell type : {\'name\': \'IF_cond_exp\', \'default_parameters\': {\'v_rest\': -65.0, \'cm\': 1.0, \'tau_m\': 20.0, \'tau_refrac\': 0.1, \'tau_syn_E\': 5.0, \'tau_syn_I\': 5.0, \'e_rev_E\': 0.0, \'e_rev_I\': -70.0, \'v_thresh\': -50.0, \'v_reset\': -65.0, \'i_offset\': 0.0}, \'default_initial_values\': {\'v\': -65.0, \'gsyn_exc\': 0.0, \'gsyn_inh\': 0.0}, \'parameters\': {\'v_rest\': <larray: base_value=-65.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'cm\': <larray: base_value=1.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_m\': <larray: base_value=20.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_refrac\': <larray: base_value=0.1 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_syn_E\': <larray: base_value=5.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'tau_syn_I\': <larray: base_value=5.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'e_rev_E\': <larray: base_value=0.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'e_rev_I\': <larray: base_value=-70.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'v_thresh\': <larray: base_value=-50.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'v_reset\': <larray: base_value=-65.0 shape=(4,) dtype=<class \'float\'>, operations=[]>, \'i_offset\': <larray: base_value=0.0 shape=(4,) dtype=<class \'float\'>, operations=[]>}}.name\n ID range : 2853-2856\n First cell on this node:\n ID: 2853\n {}'
# analogsignals (N=0)
【问题讨论】:
-
您有什么问题(或者更好的是,主要问题是什么)? pickle 是一个二进制 blob,它不是一次读取和拆分行。您的代码似乎认为它是一个以空格分隔的 CSV。你能分享这个文件的一个小例子吗?当然,大泡菜可能很难做到这一点,但如果你阅读它
data = pickle.load(resultsFileName),然后显示一小部分(或与格式匹配的数字),我们就会明白这一点。 -
@tdelaney 我添加了 pickle.load 输出