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.
'coords = np.reshape (coords, y.shape)' retten würde. – Evert
Unterstützung für die Umformung und andere Formänderungsmethoden ist derzeit in Arbeit für Koordinaten: https://github.com/astropy/astropy/pull/4123. –