【问题标题】:How to find the sum of array elements using idl\gdl program?如何使用 idl\gdl 程序找到数组元素的总和?
【发布时间】:2017-12-13 08:09:08
【问题描述】:

我正在使用readfits.pro 程序读取给出结构类型数组的 FITS 文件。我应该使用哪个程序才能找到获得的数组元素的总和?

【问题讨论】:

    标签: idl-programming-language gdl


    【解决方案1】:

    TOTAL 函数可能是您所需要的。如果您的结构有一个字段“field1”,并且您想从数组“structArray”中的结构中添加这些值,这应该可以:

    field1Total = Total(structArray.field1)

    【讨论】:

      【解决方案2】:

      我可以回答使用 MRDFITS 的情况,您在 Dick Jackson 的回答中描述了这种情况,

      b=mrdfits('/home/bhuvi/Desktop/data/S60501010021alif4ttagfca‌​l (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
      

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        相关资源
        最近更新 更多