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 :

les lignes non dominantes d'une matrices


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut les lignes non dominantes d'une matrices
    salut,

    je cherche à recupérer toute les lignes non dominantes d'une matrices. ( l'un des éléments de la ligne choisi soit supérieur)

    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
    import numpy 
     
     
    def maxelement(arr): 
     
     
        no_of_rows = len(arr) 
        no_of_column = len(arr[0]) 
     
        for i in range(no_of_rows-1): 
     
     
            for j in range(no_of_column-2): 
     
                m=arr[i+1][j]
                n=arr[i+1][j+1]
                if arr[i+1][j] > m  or arr[i+1][j+2] >n   : 
                    m = arr[i][j] 
                    n = arr[i][j]  
     
            print(m,n) 
     
     
    arr = [[3, 4, 1, 8], 
           [1, 4, 9, 11], 
           [76, 34, 21, 1], 
           [2, 1, 4, 5]]

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    665
    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 : 665
    Par défaut
    Salut,

    Je n'ai pas bien saisi ce que vous voulez dire par "dominant". Dans l'exemple, quel est le sortie attendue ? Et, plus important encore, qu'est-ce qui vous pose problème ?

    J

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    Merci pour la réponse
    Par exemple j'ai une matrice suivante : arr = [[-1, 7], [ 3, 1], [ 2, -5], [ 7, 6], [0,1] ,[4,-1] ,[8,7] ,[-2,6] ,[4,6] ].
    je cherche les lignes qui réponds aux conditions suivantes :

    je suppose que la ligne (a, b) la ligne récupérée. il existe pas une lignes qui domine la ligne recupéré c à d : ∄ (a1,b1) / arr[a1]< arr[a] et arr[b1]< arr[b].

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    665
    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 : 665
    Par défaut
    Hmm, ça reste obscur pour moi. arr[a] est une liste (ou encore une ligne de votre matrice). Quand vous écrivez arr[a1] < arr[a], est-ce que vous sous-entendez que chaque terme de arr[a1] est inférieur à n'importe quel terme de arr[a] ? En somme, est-ce que [3, 1] < [4, 0] ?

    Je ne veux pas paraitre insistant, mais d'un point de vue programmation, qu'est-ce qui vous pose problème ?

    J

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    voici ce que je cherche :
    par exemple j'ai une matrice (A ) tel que le nombre de ligne = 10 , le nombre de colonnes = 2 .
    A = [[-1, 7], [ 3, 1], [ 2, -5], [ 7, 6], [0,1] ,[4,-1] ,[8,7] ,[-2,6] ,[4,6] ]. je cherche les blocs ( un bloque est constitue d'un ligne et d'une colonne) où il ya pas un autre bloc où l'élément de la ligne est inférieur à la ligne des blocs recherchés et l'élément de la colonne est aussi inférieur à la ligne des blocs recherchés.
    dans l'exemple en dessus les combinaisons [ 2, -5] et [-2,6] son les solutions suitées.
    merci

  6. #6
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    665
    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 : 665
    Par défaut
    Salut,

    Je n'ai rien compris. :) La terminologie me perturbe. Le premier élément, [-1, 7], est pour moi une ligne et [7, 1, -5, 6, 1, -1, 7 ,6, 6] une colonne. Quels sont les "blocs recherchés" ? Pour vous cela doit être clair, mais pour quelqu'un qui n'est pas dedans, pff..

    Mais visiblement vous vous en êtes sorti seul vu que la discussion est passée en "résolue".

    J

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut tester les élements d'une liste 2D
    Merci pour ton aide

    Maintenant , je veux tester les éléments d'une liste 2D.
    par exemple, j'ai une liste : arr = [[3,4], [4,1],[5,0],[7,1],[-1,0],[8,9],[2,-8]]
    je veux tester la ligne [3,4] ( 3 < aux valeur des ligne de arr et 4 < aux valeur des colonnes de arr ) si la condition est satisfaite je garde [3,4] dans la liste arr sinon je la surprime de a liste arr. ensuite j'incrémente vers la ligne en dessous ( c à d [4,1]) est faire la meme chose jusq'à la fin .
    la fin j'affiche la liste arr.
    merci et pardon pour le dérangement.

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    665
    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 : 665
    Par défaut
    Salut,

    Tu devrais ouvrir un nouveau sujet lorsque tu as une nouvelle question. Même si celle-ci est directement liée, vu que tu as passé le fil en "résolu", peu de gens vont lire ta question.

    Juste pour être sûr de comprendre le problème : dans l'exemple, qu'est-ce qu'une ligne et qu'est-ce qu'une colonne ? Pour ma part, [3, 4], ou [4, 1] sont des lignes. Donc à la question " 3 < aux valeur des ligne de arr ?", je réponds non, car 3 > 1. Mais mon petit doigt me dis que ce n'est pas ce que tu as en tête.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    ok merci

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2020
    Messages : 7
    Par défaut
    merci ,

    pour moi j'ai une liste arr = [[3,4], [4,1],[5,0],[7,1],[-1,0],[8,9],[2,-8]] . ( pour moi [3,4] est une ligne tel que 3 est le 1 premier élément de cette ligne et 4 est le 2 deuxième élément de la ligne [3,4].
    l'objectif est de tester toutes les lignes :

    si ([3,4]) ( 3 est inférieur au tous les premiers éléments de toutes autres lignes de la liste et 4 inférieur au tous les deuxièmes éléments de toutes autres lignes de la liste) cette condition est satisfaite je garde la ligne [3,4] dans la liste sinon je le surprime. ensuite je passe à la ligne prochaine ([4,1]) la meme chose jus'à la fin
    aprés j'affiche la liste arr.
    merci

  11. #11
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    665
    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 : 665
    Par défaut
    Ok, c'est clair pour moi maintenant.

    On va partir de cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import numpy as np
     
    arr = [[3,4], [4,1], [5,0], [7,1], [-1,0], [8,9], [2,-8]]
    arr = np.array(arr)
    Personnellement je ne modifierais pas arr, mais je créerais plutôt une liste vide initialement et qui augmenterait au fur et à mesure que l'on parcours arr et que les conditions sont satisfaites. Nommons cette liste arr_filtered.

    Il vous faut :
    1. Créer une liste vide arr_filtered
    2. Parcourir chaque ligne de la matrice arr
    3. regarder si le premier élément est plus petit que tous les éléments restants de la première colonne de arr, et que le deuxième élément soit plus petit que tous les éléments de la deuxième colonne de arra restant
    4. Si la condition est vraie, ajouter la ligne testée dans arr_filtered
    5. faire gaffe au dernier élément testé. Vu qu'il ne reste rien dans la liste, est-ce que par défaut il est conservé ?


    Pour parcourir les éléments, vous pouvez utiliser enumerate() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i, row in enumerate(arr):
        print(i, row)
    Pour récupérer une portion de la matrice, il suffit d'employer le slicing:
    Pour savoir si aucun élément n'est plus grand qu'une valeur, il suffit de comparer cette valeur avec le min :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(3 < arr[1:, 0].min() and 4 < arr[1:, 1].min())
    Voilà. Une fonction numpy permet certainement de faire cela en une ligne, mais bon, sauf à avoir à traiter des milliers de lignes on peut se contenter d'une boucle.

    J

    [Edit]

    J'ai un doute. Je n'ai finalement peut-être pas correctement saisi le problème. Je le comprends ainsi :
    • arr = [a, b, c, d]
    • On parcours arr, on commence par vérifier a. Si le premier élément de a est plus petit que tous les premiers éléments de b, c et d, ET et que le deuxième élément de a est plus petit que tous les deuxièmes éléments de b, c et d, alors on le prend
    • On passe au suivant, b, et on teste avec c et d
    • On passe au suivant c, et on teste avec d
    • ...


    Alors que tu veux peut-être dire :
    • arr = [a, b, c, d]
    • On parcours arr, on commence par vérifier a. Si le premier élément de a est plus petit que tous les premiers éléments de b, c et d, ET et que le deuxième élément de a est plus petit que tous les deuxièmes éléments de b, c et d, alors on le retire de arr, sinon il reste.
    • On passe au suivant, b, et on teste avec a, c et d (si tant est que a soit resté)
    • On passe au suivant c, et on teste avec a, b et d (si tant est que b soit resté)
    • ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LibreOffice][Tableur] Masquer les lignes non remplies sur une autre page
    Par AudricG dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 14/09/2017, 12h03
  2. Extraire des lignes non conjointes d'une matrice
    Par ekica dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/02/2014, 14h44
  3. matrice: éliminer les lignes non nulles
    Par ahcnas dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/06/2011, 14h46
  4. Garder les valeurs non nulles dans une matrice
    Par mfontan dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/04/2009, 14h42
  5. Extraire les valeurs non nulles d'une matrice
    Par kwatz dans le forum MATLAB
    Réponses: 15
    Dernier message: 06/03/2009, 12h15

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