Google Colab (Python:3.6.9, astroquery:0.4)
--Enregistrer le catalogue astronomique (correspond au fichier) de skyview --Créez et enregistrez une image de galaxie basée sur le fichier fit
Tout d'abord, récupérez les noms célestes et leurs numéros répertoriés dans le catalogue spécifié par Vizier.
from astroquery.vizier import Vizier
v=Vizier(catalog="J/ApJS/80/531/gxfluxes",columns=["Name","logLx","Bmag","dist","type"],row_limit=-1)
data=v.query_constraints()
sname=data[0]["Name"]
namelist=[]
for one in sname:
name=one.strip().split()[0]
name=one.replace("N","NGC").replace("I","IC")
namelist.append(name)
olist=["HRI","DSS"]
Dans ce cas, len (namelist) = 448, donc nous pouvons voir qu'il y a 448 corps célestes. Enregistrez les fichiers d'ajustement de ces corps célestes dans l'ordre.
def save(p,name,obs): # save file into fits
for onep,oneo in zip(p,obs):
onep.writeto(name+"_"+oneo+".fits",overwrite=True)
from astroquery.skyview import SkyView
path_fits="/content/drive/My Drive/datastore/fits/"
num=int(input("Times of try (for <=448) : "))
filename=[]
for i in range(num):
name=namelist[i]
try:
paths=SkyView.get_images(position=name,survey=olist)
save(paths,path_fits+name,olist)
filename.append(name)
print("Saved {}".format(name))
except:
print("Not found {}".format(name))
Lisez le fichier fit dans le répertoire. Étant donné que le fichier fit contient des informations sur les tableaux ndarray 300x300, transformez-les une fois en une matrice 1x90000. Faites de même pour les autres fichiers fit et ajoutez les résultats au même ndarray.
#Données d'image unidimensionnelles du fichier fit dans le répertoire
#Stockez les données d'image dans chaque ligne de données dans un tableau à deux dimensions
path_fits=glob.glob("/content/drive/My Drive/datastore/fits/*_DSS.fits")
N=100
#N=len(path_fits)
h=300
w=300
data = np.empty(h*w*N).reshape(N, h*w)
img_data=np.empty(h*w*N)
for i in range(N):
dsshdu=fits.open(path_fits[i])[0]
dsswcs=WCS(dsshdu.header)
dssdata=dsshdu.data
img_data=np.array(dssdata)
data[i] = np.array(dssdata).flatten()
data.shape
Remodelez à nouveau les données d'image qui ont été aplaties dans une matrice 300 x 300. Tracez-le un par un dans la direction de l'axe = 0.
data_reshaped=data.reshape(N,h,w)
f=plt.figure(figsize=(15,15))
f.subplots_adjust(left=0,right=1,bottom=0,top=1,hspace=0.05,wspace=0.05)
for i in range(N):
ax=f.add_subplot(10, 10, i+1, xticks=[], yticks=[])
ax.imshow(data_reshaped[i], interpolation="bilinear")
plt.show()