2015-02-17 1 views
1

Я написал процедуру в IDL, которая выполняет некоторые вычисления по данным и выводит массив значений. Расчеты занимают около 2 минут.
Мне нужно выполнить анализ этих результатов, и в идеале я бы не хотел выполнять начальные вычисления каждый раз, когда я хочу выполнить какой-то другой анализ.Несколько процедур в программе IDL

Это лучший способ добиться этого, чтобы сохранить результат вычисления в файле данных, а затем прочитать это из другой программы? Или существует менее громоздкий способ сделать это?

Заранее спасибо за любую помощь

ответ

3

Да, сохранение в файл - это самый простой способ сохранить результаты из вашей первой программы для последующего использования во втором (если вы выйдете из IDL между ними). Возможны способы сохранения данных, в зависимости от их типа и ваших предпочтений.

Самый простой способ:

IDL .sav файл, созданный с помощью команды SAVE может хранить любые данные, переменные IDL, и даже в целом состояние вашего IDL сессии. К сожалению, он работает только для IDL (никаких других языков), и его можно будет сгенерировать, если вы обновите версию IDL. Вы читаете эти файлы с помощью RESTORE, который даже запоминает имена переменных.

my_variable = 'Some data here.' 

SAVE, my_variable, FILENAME='myfile.sav' ; save variable(s) 

... IDL opened and closed here ... 

RESTORE, 'myfile.sav'      ; read variable(s) from file 

print, my_variable 
Some data here. 

Самый портативный способ:

Для простых табличных данных, CSV имеет преимущество в том, очень портативным и читаемым человеком. Однако он также медленный, поскольку числа хранятся в ASCII. Используйте WRITE_CSV, чтобы написать, и READ_CSV для чтения.

Большинство портативных двоичных форматов:

Для сложных данных, которые должны быть считаны на нескольких языках, считают HDF5 или NetCDF библиотеки. Оба они представляют собой двоичные форматы, которые могут хранить большинство типов данных, поддерживаемых IDL. Обратите внимание, что NetCDF на самом деле является простым в использовании подмножеством HDF5.

Простейшее Binary Format:

Еще один вариант для табличных данных представляет собой простой двоичный дамп. Используйте WRITEU для записи в обычный файл, открытый для записи. Используйте READU для чтения из обычного файла, открытого для чтения.

0

Если предположить, что ваши расчеты данных только меняются очень редко, то, да, ваше лучшее решение, чтобы просто сохранить расчеты в выходной файл, а затем прочитать их обратно в ваше аналитической программы. Вы не говорите, какие данные это есть, поэтому трудно дать более конкретный ответ. Если предположить, что у вас есть двумерный массив данных, можно просто записать результаты в виде «плоский» двоичный файл:

pro perform_calculations 
    ... 
    ; assume mydata is a float array of dimensions [m,n] 
    openw, 1, 'results.dat' 
    writeu, 1, mydata 
    close, 1 
end 

Тогда как в одном файле или, предпочтительно, другой файл .pro:

pro perform_analysis 
    mydata = fltarr(m, n) 
    openr, 1, 'results.dat' 
    readu, 1, mydata 
    close, 1 
    ... 
end 

Надеюсь, что это поможет.

0

Сохранение - это хороший способ сделать это, но если вы запустите в том же сеансе, и ваша вторая программа не испортит данные из первого, вы можете просто позвонить один, а затем передать результат на второй один.

pro do_calculations,result1,result2,result3 
    result1=1 
    result2=1. 
    result3=result1/result2 
    return 
end 

pro use_calculations,result1,result2,result3,result4 
    result4=result1-result2+result3 
    return 
end 

Тогда

IDL> do_calculations,result1,result2,result3 
IDL> use_calculations,result1,result2,result3,result4 

При редактировании use_calculations, вы можете пойти снова:

IDL> use_calculations,result1,result2,result3,result4 

Поскольку ранние результаты будут оставаться в памяти, если use_calculations не делает что-то плохое к ним.

Вы также можете настроить вторую процедуру проверки, чтобы убедиться, что она имеет действительные результаты от первого и называет ее по мере необходимости.

Смежные вопросы