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

2024-05-16 02:21:05 发布

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

我是新来的,对python一般来说,请原谅任何格式问题和其他问题。我是一个物理学家,我有一个参数模型,我想迭代一个或多个模型的参数值(可能在MCMC设置中)。但为了简单起见,假设我只有一个可能值为N的参数。在循环中,我计算模型和与之相关的几个标量度量。在

我想将数据[参数值,metric1,metric2,…]逐行保存到一个文件中。我不在乎什么类型:.pickle、.npz、.txt、.csv或任何其他类型都可以。在

我不想在计算完所有的N模型之后保存数组。这里的问题是,有时一个参数值是如此的非物理性,以至于我调用来计算模型的程序(这是一个非常复杂的东西,多年来一直在开发中,所以我没有接触它)会崩溃内核。如果我有30000个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格式,但都不知道如何使用它们。如果有更好的格式或更好的解决方案,我很感谢你的任何建议。在

编辑:我试图制作一个文本文件,在循环内:

^{pr2}$

它第一次在2600点坠毁,或者我认为这只是巧合,但每次我尝试这个,它就停下来了。我可以破解它,生成一批2600行的文件,但肯定有更好的解决方案。在


Tags: 文件模型类型参数格式建议picklenpz
1条回答
网友
1楼 · 发布于 2024-05-16 02:21:05

对错误的了解如此有限,很难说,但如果您认为这是一个文件写入错误,您可以尝试以下方法:

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评论和保存到单独的文件(我的工作就是这样做的)。在

相关问题 更多 >