Как найти сумму элементов массива с помощью программы idl\gdl?

Я использую программу readfits.pro для чтения файла FITS, который дает массив структурного типа. Какую программу я должен использовать, чтобы найти сумму элементов полученного массива?

2 ответа

ВСЕГО функция может быть то, что вам нужно. Если в вашей структуре есть поле "field1", и вы хотите сложить эти значения из структур в вашем массиве "structArray", это должно сработать:

field1Total = Total (structArray.field1)

Я могу ответить за случай использования MRDFITS, который вы описали в комментариях к ответу Дика Джексона,

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, и произвольно назвал поле "data":

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. С другой стороны, вы могли бы просто использовать help с отдельными структурами путем индексации массива b:

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

Наконец, чтобы получить сумму, используйте total() как предложил Дик Джексон:

IDL> print, total(b.data)
  3.73841e-13
Другие вопросы по тегам