我是这里的新手,也是python的新手,所以请原谅任何格式问题以及其他任何内容。我是物理学家,并且有一个参数模型,在这里我想迭代一个或多个模型的参数值(可能在MCMC设置中)。但是为简单起见,假设我只有一个带有 N 个可能值的参数。在一个循环中,我计算了模型以及与之相关的几个标量指标。
我要逐行将数据[参数值,metric1,metric2,...]保存到文件中。我不在乎什么类型:.pickle,.npz,.txt,.csv或其他任何类型都可以。
我不要在计算所有 N 个模型后保存数组。这里的问题是,有时参数值是如此不自然,以至于我调用该程序来计算模型的程序(这是多年开发中的一件非常复杂的事情,因此我没有涉及)会导致内核崩溃。如果我有 N = 30000 个模型要做,而这发生在 29000 上,那我会很不高兴,并且浪费了很多时间。我可能还必须意识到内存的使用情况-我想出了如何处理文本文件的建议,但是它在 2600 行附近崩溃,因为我认为它不喜欢打开一个文本文件那么长。
因此,一些伪代码:
filename = 'outFile.extension'
dataArray = np.zeros([N,3])
idx = 0
for p in Parameter1:
modelOutputVector = calculateModel(p)
metric1, metric2 = getMetrics(modelOutputVector)
dataArray[idx,0] = p
dataArray[idx,1] = metric1
dataArray[idx,2] = metric2
### Line that saves data here
idx+=1
我偏爱npz或pickle格式,但无法弄清楚如何使用它们。如果有更好的格式或更好的解决方案,我将不胜感激。
编辑:我试图制作一个文本文件是在循环内:
fileObject = open(filename, 'ab')
np.savetxt(fileObject, rowOfData, delimiter = ',', newline = ' ')
fileObject.write('\n')
fileObject.close()
它第一次崩溃是在2600或我以为只是偶然的情况下发生的,但是每次我尝试这样做时,它就停止了。我可以破解它并制作一批全部2600行的文件,但是必须有一个更好的解决方案。
答案 0 :(得分:0)
很难对错误有如此有限的了解,但是如果您认为这是文件写入错误,则可以尝试以下操作:
with open(filename, 'ab') as fileObject:
# code that computes numpy array
np.savetxt(fileObject, rowOfData, delimiter = ',', newline = ' ')
fileObject.write('\n')
# no need to .close() because the "with open()" will handle it
但是
np.savetxt()
我只是更喜欢with open()
技术,因为这是我阅读的所有入门python书籍如何构造其文件读/写过程的方式,因此我认为其中有很多知识。您也可以考虑像fabianegli一样注释并保存到单独的文件中(这就是我的工作)。