如何处理pickle文件?

2024-05-18 23:44:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

Tags: namebasevaluerevfloatclassoperationsparameters
1条回答
网友
1楼 · 发布于 2024-05-18 23:44:26

我在代码中使用pickle文件;我就是这样读的

import pickle
with open('pickled.pkl', 'rb') as pickled_file:
    data = pickle.load(pickled_file)

如果这没有帮助,请张贴错误

相关问题 更多 >

    热门问题