2016-06-09 8 views
0

Я работаю с спектрами SDSS, я читаю файл с файлами, используя mrdfits, он говорит, что данные хранятся в 8 columns and 3838 rows, что является правильным размером данных.Извлечь отдельные столбцы из массива в IDL

Но когда я ищу конкретный столбец, используя print spec[0,1], он возвращает ошибку out of bound. Если я использую print spec[0*1] это дает выход

{11.7020 3.58080 0.0990829 0 0 1.49589 15.6233 10.8985}

я думаю, это один элемент, а не 8. Как я могу отделить эти столбцы в отдельные из них из этого массива?

ответ

1

Я не знаком с вашим точным форматом данных, но кажется, что каждая строка представляет собой структуру с 8 полями. Команда HELP будет полезна для вас здесь:

IDL> help, spec[0] 

должен дать вам некоторый вывод о том, как получить доступ к столбцам данных. Например, я могу привести пример spec, чтобы показать вам (не беспокойтесь об этой команде, у вас уже есть spec!):

IDL> spec = replicate({a: 0, b:0, c:0, d:0, e:0, f:0, g:0, h:0}, 3838) 

HELP скажет вам, что у вас есть массив структур:

IDL> help, spec 
SPEC   STRUCT = -> <Anonymous> Array[3838] 

HELP на отдельной строке расскажет вам имена полей (столбцов):

IDL> help, spec[0] 
** Structure <170b6a8>, 8 tags, length=16, data length=16, refs=2: 
    A    INT    0 
    B    INT    0 
    C    INT    0 
    D    INT    0 
    E    INT    0 
    F    INT    0 
    G    INT    0 
    H    INT    0 

Вы можете также доступ весь столбец:

IDL> help, spec.a 
<Expression> INT  = Array[3838] 

Вы можете сегментировать данные различными способами, проверить spec[100], spec[100].aspec.a, или spec.a[100]. Вы также можете использовать стандартную индексацию массива, такую ​​как spec[10:19].a.