将numpy数组的行写入文件的最佳方法,而不是在循环之后?

时间:2019-03-26 23:54:03

标签: python arrays numpy pickle writefile

我是这里的新手,也是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行的文件,但是必须有一个更好的解决方案。

1 个答案:

答案 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一样注释并保存到单独的文件中(这就是我的工作)。