2016-05-24 1 views
-2

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.

+0

'coords = np.reshape (coords, y.shape)'. – Evert

+0

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. –

Répondre

0

Ok, j'ai trouvé une solution par moi-même. Cela implique toujours d'exporter et d'importer, mais cela ne perdrait pas de précision. Et ça marche juste.

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

ils souhaitent fournir une méthode intégrée reshape à l'avenir, ce qui me gagner du temps ~