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 :

suppression de toutes les nièmes lignes d'une matrice type numpy array [Python 2.X]


Sujet :

Python

  1. #1
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut suppression de toutes les nièmes lignes d'une matrice type numpy array
    Bonjour à tous,

    Je souhaiterais supprimer des lignes d'une matrices de type numpy array.

    La particularité serait de supprimer les lignes 1, 5, 9, 13, 17, 21 etc .... Je sais que je dois passer par le modulo.

    Pour supprimer une ligne il est possible d'utiliser delete

    Cependant j'aurai aimé utiliser cette méthode que j'ai vue sur un site :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     >>> import numpy as np
      >>> Mi = np.array([[1, 2, 3], [4, 100, 6], [100,1,2], [12, 100, 50]])
      >>> print Mi
     [[  1   2   3]
      [  4 100   6]
      [100   1   2]
      [ 12 100  50]]
      >>> M = Mi[~(Mi[:,1] > 30)]
      >>> print M
     [[  1   2   3]
      [100   1   2]]
    La Ligne 9 permet de supprimer les lignes de la matrice Mi dont les éléments sont plus grand que 30 dans la deuxième colonne.

    Donc plutôt que de faire une boucle sur la matrice et faire un if avec le modulo etc .... est-il possible de supprimer toutes les lignes cité plus haut de la même manière ?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Bon j'ai essayé de faire quelque chose avec une boucle.

    Par contre j'obtiens pas le résultat souhaité

    En gros je souhaite effacer de mon tableau toutes les 8ème lignes (1, 9, 13, etc ...).

    Voici le code :

    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
     
    print shape(array_1)
    i=0
    for l in array_1:  
     
        if i%8 == 0 :
     
            print array_1[i,:]
            print p
     
            numpy.delete(array_1, i)
     
        i+=1
     
     
    print shape(array_1)
    j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (17152, 31)
    (17152, 31)
    Normalement la dimension de mon array_1 devrait être plus petite non, vue que je retire des lignes

    De plus lorsque je fait le print array_1[i,:] il m'affiche toujours la même ligne alors qu'elle est différente dans mon tableau.

    Je ne comprend pas

    Une idée ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salit,
    Citation Envoyé par nekcorp Voir le message
    Normalement la dimension de mon array_1 devrait être plus petite non, vue que je retire des lignes

    De plus lorsque je fait le print array_1[i,:] il m'affiche toujours la même ligne alors qu'elle est différente dans mon tableau.

    Je ne comprend pas
    Il n'y a rien à comprendre... juste taper help(numpy.delete) et lire...

    Pour supprimer les lignes 0, 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import numpy as np
    >>> ar = np.array([[1, 2, 3], [4, 100, 6], [100,1,2], [12, 100, 50]])
    >>> np.delete(ar, [0, 2], axis=0)
    array([[  4, 100,   6],
           [ 12, 100,  50]])
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salit,


    Il n'y a rien à comprendre... juste taper help(numpy.delete) et lire...

    Pour supprimer les lignes 0, 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> import numpy as np
    >>> ar = np.array([[1, 2, 3], [4, 100, 6], [100,1,2], [12, 100, 50]])
    >>> np.delete(ar, [0, 2], axis=0)
    array([[  4, 100,   6],
           [ 12, 100,  50]])
    - W
    Ok mais dans ce cas je dois faire une liste contenant tout les id des lignes que je veux supprimer ?

    Merci pour ta réponse.

  5. #5
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    A tout hasard, avec un range ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    np.delete(Mi, list(range(1, len(Mi)+1), 4), axis=0)
    Le temps ronge l'amour comme l'acide.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    Ok mais dans ce cas je dois faire une liste contenant tout les id des lignes que je veux supprimer ?
    C'est l'idée, non(*)? Ca devrait accepter un générateur comme range(1, len(...), 8) directement.
    (*) c'est quand même pas compliqué d'essayer un truc à la console pour voir ce que çà donne. La machine ne vous mordra pas et, à priori, personne derrière vous pour se moquer...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est l'idée, non(*)? Ca devrait accepter un générateur comme range(1, len(...), 8) directement.
    (*) c'est quand même pas compliqué d'essayer un truc à la console pour voir ce que çà donne. La machine ne vous mordra pas et, à priori, personne derrière vous pour se moquer...
    - W
    Désolé j'avais mis un ? mais en fait je ne voulais pas poser de question. C'est juste que je pensais qu'en utilisant le modulo ça aurait été plus pratique.

    Merci j'ai réussis à résoudre mon problème.

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

Discussions similaires

  1. [Python 2.X] Afficher toutes les "nième" lignes d'un fichier texte
    Par nekcorp dans le forum Général Python
    Réponses: 3
    Dernier message: 21/04/2016, 14h48
  2. Réponses: 2
    Dernier message: 21/02/2014, 13h33
  3. Réponses: 0
    Dernier message: 28/06/2013, 16h30
  4. Fusionner toutes les 4 lignes en une seule ligne
    Par mlaiti dans le forum Linux
    Réponses: 3
    Dernier message: 14/06/2012, 01h03
  5. Suppression de toutes les tables d'une BDD
    Par Lucifron dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/04/2006, 10h52

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