IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Création d'une carte de densité - numpy


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 44
    Points : 12
    Points
    12
    Par défaut Création d'une carte de densité - numpy
    Bonjour,

    Je me permets de poster quelque chose dans la section car je bloque sur la création de ma carte de densité d'étoiles.

    Je crée un diagramme couleur-magnitude (si jamais ça intéresse du monde : CMD) d'un champ stellaire.

    Pour ce faire, j'utilise le code que j'ai écrit suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/usr/bin/python
    # coding: utf-8
     
    from astropy.io import fits
    from astropy.table import Table
    from astropy.table import Column
    import numpy as np
    import matplotlib.pyplot as plt
     
     
            ###################################
            # Importation du fichier de champ #
            ###################################
     
    filename = '/home/valentin/Desktop/Field169_combined_final_roughcal.fits_traite_traiteXY_traiteXY_final'
     
    print 'Fichier en cours de traitement' + str(filename) + '\n'
     
    # Ouverture du fichier à l'aide d'astropy
    field = fits.open(filename)        
     
    # Lecture des données fits 
    tbdata = field[1].data            
     
     
            #####################################
            # Traçage des différents graphiques #
            #####################################
     
     
    fig1 = plt.figure(1)
    plt.plot(tbdata['g0-r0'], tbdata['g0'], '.')
    plt.title('Diagramme Couleur-Magnitude')
    plt.xlabel('(g0-r0)')
    plt.ylabel('g0')
    plt.xlim(-1.5,2.5)
    plt.ylim(14,28)
    plt.gca().invert_yaxis()
     
    plt.show()
     
    print "Création du Diagramme"
    Ok, cela marche bien et j'obtiens le résultat suivant :

    Nom : figure_1.png
Affichages : 234
Taille : 62,7 Ko

    Néanmoins, j'aimerai faire une boîte de sélection pour afficher sur ce graphique par exemple (ou sur un autre, voir les 2), seulement les étoiles (points) ayant un (g0-r0) compris entre -0.4 < (g0-r0) < 0.8

    Ce que je fais, c'est de coder cette sélection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         #######################################
            # Paramètres pour la carte de densité #
            #######################################
     
    # Boite des étoiles bleues :
     
     
    Tri_1 = tbdata[((tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0']))]    # Ne garder que les -0.4 < (g-r)0 < 0.8
     
    print Tri_1
    Puis je trace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    fig2 = plt.figure(2)
    plt.plot(Tri_1, tbdata['g0'], '.')
    plt.title('Diagramme Couleur-Magnitude étoiles bleues')
    plt.xlabel('(g0-r0)')
    plt.ylabel('g0')
    plt.xlim(-1.5,2.5)
    plt.ylim(14,28)
    plt.gca().invert_yaxis()
     
    plt.show()
    Mais forcément j'ai une erreur de dimension entre x et y. Ce qu'il faut faire c'est donc récupérer uniquement les valeurs de la colonne g0 correspondant aux lignes qui respectent mon Tri_1

    Mais je bloque sur la façon d'écrire cela ...

    ==> En gros la question c'est, comment faire une boîte de sélection

    Mon fichier fits se compose de la façon suivante :

    ID RA DEC NDET DEPTHFLAG SEPINDX [65] SEPFINDX [65] U UERR G GERR R RERR I IERR Z ZERR CHI SHARP FLAG PROB EBV g0 r0 i0 z0 X Y g0-r0
    ------------- ---------- ---------- ---- --------- ------------ ------------- ----- ---- ------- --------- ------- --------- ------- ---------- ------- ---------- -------- --------- ---- ---- --------- ------- ------- ------- ------- ------- ------- -------- --------
    Field169.1255 184.766833 -30.472462 17 3 1254 .. -1 1254 .. -1 99.99 9.99 21.4875 0.0100426 20.0497 0.0070361 18.9002 0.00376412 18.4352 0.00425852 0.911594 -0.212171 -1 0.87 0.0709362 21.257831573486328, 19.895366668701172, 18.787057876586914, 18.348880767822266, -0.23369831258206375, 0.98211750000000109, 1.3624649047851562

    Sur environ 200.000 lignes

    Merci d'avance pour votre aide !

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Citation Envoyé par Andromedae Voir le message
    # Ouverture du fichier à l'aide d'astropy
    field = fits.open(filename)
    Salut,

    Je ne suis pas certain de la forme que prends vos données après import avec "astropy". Mais imaginons que tbdata['g0'] et tbdata['g0-r0'] soient des nparray (1D). Dans ce cas, il suffit de récupérer les positions (index) dans la liste tbdata['g0-r0'] satisfaisant le critère de trie, puis de récupérer les éléments de tbdata['g0'] à ces positions.
    En d'autres termes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import numpy as np
    import random
     
    # Build a set of random values
    npoints = 50
    tbdata = {'g0-r0': np.linspace(0, 10, npoints),
              'g0': np.array([random.random() for _ in range(npoints)])
              }
     
    # Get index of of tbdata['g0-r0'] where 'go-r0' is between 0.1 and 0.84
    index = np.where((0.1 < tbdata['g0-r0']) & (tbdata['g0-r0'] < 0.84))[0]
    # Get subsets of tbdata['g0-r0'] and tbdata['g0']
    tbdata_g0_r0_filtered = tbdata['g0-r0'][index]
    tbdata_g0_filtered = tbdata['g0'][index]
     
    print tbdata_g0_filtered
    tbdata_g0_r0_filtered et tbdata_g0_filtered seront de même taille.

    J

Discussions similaires

  1. Création d'une carte de France sur un état
    Par rnicolas.1987 dans le forum IHM
    Réponses: 11
    Dernier message: 15/10/2008, 12h02
  2. Réponses: 3
    Dernier message: 22/05/2007, 11h05
  3. Création d'une carte géographqiue pour un jeu.
    Par Space Cowboy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/03/2007, 12h26
  4. création d'une carte au format jpg
    Par TocTocKiéLà? dans le forum C++
    Réponses: 2
    Dernier message: 13/02/2007, 17h28
  5. création d'une carte avec navigation du type mappy
    Par BernardT dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 30/10/2005, 01h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo