Je veux faire un tracé de contour 2D en utilisant unSkyCoord
objet contenant un tableau de coordonnées comme un paramètre d'entrée. Pour ce faire, je voulais faire un maillage sur les paramètres.Comment remodeler un tableau à l'intérieur d'un objet astropy.coordinate.SkyCoord?
Le code est quelque chose comme ceci.
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)
Le problème vient ici. J'ai essayé d'utiliser np.meshgird
sur coords
, mais il renvoie une np.array
de SkyCoord
, plutôt que unSkyCoord
objet contenant un tableau de coordonnées, ce qui est pas ce que je veux. Pour la fonction Something_Fun
appelle les fonctions membres de SkyCoord
, ce qui ne fonctionne certainement pas avec un np.array
.
Malheureusement, une méthode intégrée reshape
est non fourni pour SkyCoord
, même si elle ne ont une méthode shape
! Si garder la forme de coords
, le code ne fonctionnera pas parce que les opérations ne peuvent pas diffuser avec des tableaux de différentes dimensions.
Existe-t-il un moyen élégant de le faire? Je ne souhaite pas réécrire les codes qui génèrent coords
ou la fonction Something_Fun
car cela gâcherait beaucoup d'autres choses.
L'exportation de données SkyCoord
vers une chaîne et une nouvelle importation peut faire l'affaire, mais elle est beaucoup trop "sale" et perd de sa précision. Je pourrais essayer en dernier recours.
'coords = np.reshape (coords, y.shape)'. – Evert
La prise en charge de la réorganisation et d'autres méthodes de modification de forme est en cours pour les coordonnées en ce moment: https://github.com/astropy/astropy/pull/4123. –