2016-05-24 5 views
-2

Ich möchte ein 2D-Konturplot unter Verwendung einsSkyCoord Objekt mit einem Array von Koordinaten als Eingabeparameter.Wie man Array innerhalb eines astropy.coordinate.SkyCoord Gegenstandes umgestaltet?

Um dies zu tun, wollte ich einen Mesh-Gürtel über Parameter machen.

Der Code ist in etwa so.

l = np.linspace(0, 360, 180) 
b = np.linspace(-90, 90, 90) # Two axes I wanted to make contour on. 
y=y.reshape(y.size,1,1) #(originally) an 1D array the same size as `coords`. 
l=l.reshape(1,l.size,1) 
b=b.reshape(1,1,b.size) 
coords = coords.reshape(y.shape) # No, this does not work. 
coords.shape = y.shape # You can't write attributes like this. How frustrating. 
z = Something_Fun((l,b),y,coords) 

Das Problem kommt hier. Ich versuchte np.meshgird über coords zu verwenden, aber es gibt ein np.array von SkyCoord statt einSkyCoord Objekt enthält ein Array von Koordinaten, die nicht das, was ich will. Für die Funktion Something_Fun werden Member-Funktionen von SkyCoord aufgerufen, was bei einem np.array sicherlich nicht funktioniert.

Leider eine eingebaute in reshape Methode nicht für SkyCoord zur Verfügung gestellt, obwohl es auch tut eine shape Methode haben! Wenn die Form coords beibehalten wird, wird der Code nicht funktionieren, da Vorgänge mit Arrays unterschiedlicher Dimensionen nicht übertragen werden können.

Gibt es eine elegante Möglichkeit, dies zu tun? Ich möchte keine Codes schreiben, die coords oder die Funktion Something_Fun generiert, weil es viele andere Dinge durcheinander bringen würde.

Exportieren von SkyCoord Daten zu Zeichenfolge und importieren Sie wieder, könnte den Trick tun, ist aber viel zu "schmutzig" und verliert die Präzision. Ich könnte es als letzten Ausweg versuchen.

+0

'coords = np.reshape (coords, y.shape)' retten würde. – Evert

+0

Unterstützung für die Umformung und andere Formänderungsmethoden ist derzeit in Arbeit für Koordinaten: https://github.com/astropy/astropy/pull/4123. –

Antwort

0

Ok, ich habe mir eine eigene Lösung ausgedacht. Es geht immer noch darum, hin und her zu exportieren und zu importieren, aber es würde die Genauigkeit nicht verlieren. Und es funktioniert einfach.

coords=SkyCoord(coords.ra.reshape(y.shape),coords.dec.reshape(y.shape)) 

wünschen sie eine eingebaute in reshape Methode in der Zukunft bieten würde, die mir etwas Zeit ~

Verwandte Themen