2016-06-09 18 views
0

Ich arbeite mit SDSS-Spektren, ich lese eine passt Datei mit mrdfits, es sagt, dass die Daten in 8 columns and 3838 rows gespeichert sind, die die richtige Dimension der Daten ist.Extrahiere einzelne Spalten aus einem Array in IDL

Aber wenn ich eine bestimmte Spalte mit print spec[0,1] suchen, gibt es einen Fehler von out of bound. Wenn ich print spec[0*1] es gibt eine Leistung von

{11.7020 3.58080 0.0990829 0 0 1.49589 15.6233 10.8985}

Was ich denke, ist ein Element und nicht 8. Wie kann ich diese Spalten in einzelne aus diesem Array trennen?

Antwort

1

Ich bin nicht vertraut mit Ihrem genauen Datenformat, aber es scheint wie jede Zeile ist eine Struktur mit 8 Feldern. Der HELP Befehl wird nützlich sein, um Sie hier:

IDL> help, spec[0] 

sollten Sie eine Ausgabe geben, wie die Spalten von Daten zuzugreifen. Zum Beispiel kann ich ein Beispiel spec machen, Ihnen zu zeigen (keine Sorge über diesen Befehl bereits ein spec haben!):

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

HELP werden Ihnen sagen, dass Sie eine Reihe von Strukturen aufweisen:

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

HELP auf einer einzelnen Zeile sehen Sie die Namen der Felder erzählen (Spalten):

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 

können Sie auch Zugriff auf eine ganze Spalte:

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

Sie können Ihre Daten in einer Vielzahl von Möglichkeiten Besuche spec[100], spec[100].a, spec.a oder spec.a[100] schneiden und würfeln. Sie können auch die normale Array-Indizierung verwenden, z. B. spec[10:19].a.