【发布时间】:2017-12-13 08:09:08
【问题描述】:
我正在使用readfits.pro 程序读取给出结构类型数组的 FITS 文件。我应该使用哪个程序才能找到获得的数组元素的总和?
【问题讨论】:
标签: idl-programming-language gdl
我正在使用readfits.pro 程序读取给出结构类型数组的 FITS 文件。我应该使用哪个程序才能找到获得的数组元素的总和?
【问题讨论】:
标签: idl-programming-language gdl
TOTAL 函数可能是您所需要的。如果您的结构有一个字段“field1”,并且您想从数组“structArray”中的结构中添加这些值,这应该可以:
field1Total = Total(structArray.field1)
【讨论】:
我可以回答使用 MRDFITS 的情况,您在 Dick Jackson 的回答中描述了这种情况,
b=mrdfits('/home/bhuvi/Desktop/data/S60501010021alif4ttagfcal (2).fit',
1,range=[3112,3114]) MRDFITS: Binary table. 1 columns by 3 rows.
GDL> print,b { 1.61571e-13}{ 1.06133e-13}{ 1.06137e-13}
我认为你得到的是一组结构。看起来每个结构都有一个字段,填充了一个浮点数。为了说明,我定义了一个由这些结构组成的数组,使用你对 b 的值,并且我任意命名了字段“数据”:
b= [{data:1.61571e-13},{data:1.06133e-13},{data:1.06137e-13}]
当我打印它时,我得到了和你一样的输出:
IDL> print, b
{ 1.61571e-13}{ 1.06133e-13}{ 1.06137e-13}
所以,我很确定这就是您的数据的样子。要自己检查,help 是您的朋友。
IDL> help, b
B STRUCT = -> <Anonymous> Array[3]
这告诉你 b 是一个结构数组。您可以通过/structure 关键字(简称/str)来获取数组中结构的构成信息:
IDL> help, b, /str
** Structure <beb6f8>, 1 tags, length=4, data length=4, refs=1:
DATA FLOAT 1.61571e-13
这表示数组 b 的第一个元素是一个结构体,其中包含一个名为“data”的字段,它指向一个浮点值 1.61571e-13。或者,您可以通过索引数组 b 将 help 与单个结构一起使用:
IDL> help, b[0]
** Structure <beb6f8>, 1 tags, length=4, data length=4, refs=2:
DATA FLOAT 1.61571e-13
IDL> help, b[1]
** Structure <beb6f8>, 1 tags, length=4, data length=4, refs=2:
DATA FLOAT 1.06133e-13
IDL> help, b[2]
** Structure <beb6f8>, 1 tags, length=4, data length=4, refs=2:
DATA FLOAT 1.06137e-13
我发现结构数组非常有用,因为您可以轻松查看单个结构,或者您可以轻松地从所有结构的特定字段中创建一个数组。换句话说,要获取您的数据,只需使用 structure.field 表示法,您就有一个由数组中三个结构中每一个结构的浮点数组成的向量:
IDL> print, b.data
1.61571e-13 1.06133e-13 1.06137e-13
最后,要得到总和,请按照 Dick Jackson 的建议使用 total():
IDL> print, total(b.data)
3.73841e-13
【讨论】: