Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Idl programming language IDL程序中的多过程_Idl Programming Language - Fatal编程技术网

Idl programming language IDL程序中的多过程

Idl programming language IDL程序中的多过程,idl-programming-language,Idl Programming Language,我用IDL编写了一个过程,它对数据执行一些计算并输出一个值数组。计算过程大约需要2分钟。 然后,我需要对这些结果进行分析,理想情况下,我不希望每次需要执行不同的分析时都必须执行初始计算 实现这一点的最佳方法是将计算的输出保存到数据文件中,然后从其他程序中读取?或者有没有一种不那么麻烦的方法 提前感谢您提供的帮助假设您的数据计算很少发生更改,那么,是的,您最好的解决方案是将计算保存到输出文件中,然后将其读回分析程序。你没有说这是什么样的数据,所以很难给出更具体的答案。假设您有一个二维数据数组,您可

我用IDL编写了一个过程,它对数据执行一些计算并输出一个值数组。计算过程大约需要2分钟。
然后,我需要对这些结果进行分析,理想情况下,我不希望每次需要执行不同的分析时都必须执行初始计算

实现这一点的最佳方法是将计算的输出保存到数据文件中,然后从其他程序中读取?或者有没有一种不那么麻烦的方法


提前感谢您提供的帮助

假设您的数据计算很少发生更改,那么,是的,您最好的解决方案是将计算保存到输出文件中,然后将其读回分析程序。你没有说这是什么样的数据,所以很难给出更具体的答案。假设您有一个二维数据数组,您可以将结果作为“平面”二进制文件写入:

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

希望这有帮助。

是的,保存到文件是保存第一个程序的结果以供第二个程序使用的最简单方法(假设您在两个程序之间退出IDL)。根据数据的类型和您的首选项,可能有保存数据的方法

最简单的方法:

由该命令创建的IDL.sav文件可以存储任何类型的数据、IDL变量,甚至IDL会话的整个状态。不幸的是,它只适用于IDL(没有其他语言),如果您升级IDL版本,它可能需要重新生成。您可以使用读取这些文件,它甚至可以记住变量的名称

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中。用于书写和阅读

大多数可移植二进制格式:

对于需要由多种语言读取的复杂数据,请考虑或库。这两种都是二进制格式,可以存储大多数类型的IDL支持的数据。请注意,NetCDF实际上是HDF5的一个更易于使用的子集

最简单的二进制格式:


表格数据的另一个选项是简单的二进制转储。使用
WRITEU
写入为写入而打开的普通文件。使用
READU
读取打开的普通文件。

保存是一种很好的方法,但是如果您在同一会话中运行,并且您的第二个程序不会弄乱第一个程序中的数据,您可以调用一个程序,然后将结果传递给第二个程序

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
然后

如果您编辑
使用\u计算
,您可以通过以下方式再次进行操作:

IDL> use_calculations,result1,result2,result3,result4
因为早期的结果将保留在内存中,除非
use\u calculations
对它们做了不好的事情

您还可以设置第二个过程来检查它是否具有第一个过程的有效结果,并根据需要调用它

IDL> use_calculations,result1,result2,result3,result4