我正在处理一些报告到ASCII文件中的模拟的输出结果。此输出文件以详细形式编写,其中模拟的每个时间步骤都报告具有更新值的相同表。
我使用python将表处理成一个pandas数据帧,用于绘制模拟输出变量。
我的代码分为两部分:
首先,我快速传递文件,将文件拆分为多个等于时间步数的部分。我这样做是为了提取时间步骤并标记文件中报告每个时间步的部分,这样我就可以通过调用每个时间步骤轻松浏览数据。我还提取了一个时间步骤列表,因为我不需要绘制所有时间步骤,所以我使用这个表来过滤掉我想要处理的时间步骤。
第二部分是将数据实际放入数据帧。使用上一个列表中的时间步骤,我调用文件的每个部分并将表处理成一个公共数据帧。在这里我注意到我的代码拖延了。这很奇怪,因为每个步骤数据部分具有相同的大小(相同的表,相同的字符数)。不过,我确实看到处理每一步的速度越来越慢。第一步表在1.79秒读取,第二步在2.29读取,当我们在第20步时,它使用已经22秒。如果我需要阅读100步或更多步骤,这将变得非常难以管理。
我可以在这里粘贴我的一些代码,但它可能不可读,所以我试着尽可能地解释它。我将尝试在一个简单的例子中重现它:
input_file="Simulation\nStep1:1seconds\n0 0 0 0\nStep2:2seconds\n1 0 1 0\nStep3:3seconds\n3 1 2 0\nStep4:4seconds\n4 5 8 2\n"
从我的代码的第一部分开始,我将这个字符串转换为一个列表,其中每个元素都是每个步骤的数据,我得到了一个步骤列表:
data=["0 0 0 0","1 0 1 0","3 1 2 0","4 5 8 2"]
steps=[0,1,2,3]
如果我只想使用步骤1和3,我会过滤它们:
filtered_steps=[0,2]
现在我使用这个短列表只调用数据列表的第一个(0)和第三个(2)元素,处理每个字符串并将它们放入数据框中。
在像我使用的一个简单的例子中,它不使用时间,但是当我需要处理10s到100s而不是4步时,而当每个步骤有多行而不是一行字符时,时间变为一个问题。我想至少理解为什么在前一次迭代中读取的内容变得越来越慢,为什么它会变得越来越慢。