【问题标题】:How to handle a pickle file?如何处理泡菜文件?
【发布时间】: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 输出

标签: python arrays list pickle


【解决方案1】:

我在代码中使用了 pickle 文件;这就是我阅读它们的方式

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

如果这没有帮助,请发布错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多