Я новичок здесь и на 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 строк, но должно быть лучшее решение.