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

Python Discussion :

Filtrage de matrice


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Mars 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 44
    Par défaut Filtrage de matrice
    Bonsoir, Je travaille avec des matrices 2D contenant, pour un certain nombre de particule: les latitudes et longitudes de chaque particule en fonction des pas de temps :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Tabtime = np.zeros(0)
        Tabpart = np.zeros(0)
        Tabtime = np.arange(0, 87,1)
        Tabpart = np.arange(0, 15,1)
        for i in Tabtime:
        for j in Tabpart:     
            if l[i][j] <= 120 and l[i][j] >= 26:
                 if L[i][j] >= 15 and L[i][j] <= 45:   
                    lt[i][j] = np.append(lt, l[i][j])
                    Lt[i][j] = np.append(Lt, L[i][j])
    Tabtime contient les 87 pas de temps, et Tabpart contient les particules, ce que je cherche à faire est de garder les coordonnées des particules qui se situent uniquement entre 26° et 120° de longitude et 15° à 45° de Latitude.
    J'essaye de ranger ces coordonnées selectionnés dans deux nouvelles matrices mais avec mon code je n'arrive pas à les remplir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    print(lt)                
     
    >> 
    [[0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     ...
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]
     [0. 0. 0. ... 0. 0. 0.]]



    Si vous auriez une idée pour cela je veux bien

    Merci!

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Bonjour,

    Je ne suis pas sur de comprendre votre code ; les variables l,lt,L,Lt ne sont jamais initialisées et pourtant vous utilisez leur valeur ? D'où viennent ces valeurs ? Un fichier excel ?

    Si je comprends bien, à chaque pas de temps, vous avez une matrice qui vous donne la latitude et la longitude de chaque particule, est-ce que ce genre de chose vous convient ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import pandas as pd
     
    # Create fake dataframe
    df = pd.DataFrame(columns=['particle','latitude','longitude'])
    df.set_index('particle', inplace=True) # Set particle as index
     
    # Create fake data
    import random
    for i in range(100) : df.loc[str(i)]=[random.random(),random.random()]
     
    # Extract data, filter over latitude AND longitude
    filtered_data = df[(df['latitude']>0.5) & (df['longitude']<0.5)]
    print(filtered_data)

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Et sans utiliser pandas, la fonction np.where devrait suffire à répondre à votre besoin !

  4. #4
    Membre averti
    Homme Profil pro
    etudiant
    Inscrit en
    Mars 2021
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : etudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 44
    Par défaut
    Bonjour,
    merci pour la réponse,

    Toutes ces variables ont été initialisées plus tôt dans le code, voici le code depuis le début :

    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
     
     
     
    import netCDF4 as ndf
    import matplotlib.pyplot as plt
    import numpy as np
    import glob
    import math
     
     
     
    ext="*.nc4"
    for files in sorted(glob.glob(ext),reverse=True):
        print(files)  
        part_ds = ndf.Dataset(files, "r", format="NETCDF4")  
        part = part_ds.variables['part']    
        t = part_ds.variables['time']      
        l = part_ds.variables['lon']  
        L = part_ds.variables['lat']
        O = part_ds.variables['O3']
        T = part_ds.variables['T']
        PV = part_ds.variables['PV']
        p = part_ds.variables['p']   
        Tabtime = np.zeros(0)
        Tabpart = np.zeros(0)
        Tabtime = np.arange(0, len(t),1)
        Tabpart = np.arange(0, 15,1)
        lt=np.zeros((len(t),15))
        Lt=np.zeros((len(t),15))
     
        for i in Tabtime:
            for j in Tabpart:     
                if l[i][j] <= 120 and l[i][j] >= 26:
                     if L[i][j] >= 15 and L[i][j] <= 45:   
                        lt[i][j] = np.append(lt, l[i][j])
                        Lt[i][j] = np.append(Lt, L[i][j])
     
    print(lt)

    Les données sont importées depuis un ensemble de fichier NetCDF, dans lesquels elles sont sont la forme time(particule, longitude, latitude).

    Donc vous avez bien compris les données que je traite. Par contre moi je ne sais pas exactement comment utiliser votre code dans mon cas.

    D'ailleurs je cherche plus globalement à récupérer toutes les valeurs (O , T, PV, p, L, l) uniquement dans le cas des particules qui sont à : 15°<L<45° et 26°<l<120°.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Déjà votre code n'affiche que les données du dernier fichier puisque les variables sont réinitialisées à chaque itération.
    Ensuite, vérifiez que les conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                if l[i][j] <= 120 and l[i][j] >= 26:
                     if L[i][j] >= 15 and L[i][j] <= 45:
    sont vraies de temps en temps car arrivé à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        lt[i][j] = np.append(lt, l[i][j])
    çà devrait se vautrer.

    Pour le reste vous avez déjà un problème de cohérence "à la base".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        lt=np.zeros((len(t),15))
        Lt=np.zeros((len(t),15))
    crée des tableaux avec de tas de zéros.... et la condition ne sera jamais vraie.

    Après on peut utiliser des fonctionnalités un peu plus avancées mais pour l'instant, çà ne marche pas parce que vous n'êtes pas assez attentif à ce que vous avez écrit.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [XL-2010] Filtrage de données via une matrice métiers
    Par hozce dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 10/07/2015, 11h40
  2. Filtrage par matrices
    Par diremafik dans le forum Signal
    Réponses: 0
    Dernier message: 28/03/2013, 15h21
  3. Filtrage par matrice de convolution
    Par spring.time dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 17/01/2012, 14h12
  4. Filtrage Kalman, multiplication matrice
    Par kronanberg dans le forum Signal
    Réponses: 1
    Dernier message: 13/05/2011, 16h14
  5. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44

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