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 :

roll dans un tableau en python


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 15
    Points
    15
    Par défaut roll dans un tableau en python
    Salut tout le monde,
    J'ai un petit problème dans le roll :
    numpy.roll(a, shift, axis=None)

    Moi j'ai un tableau (a) , que j'ai envie de changer,( chiffter les données en colonne, axis =1) mais pas du même nombre, (shift). les nombres avec lesquels j'ai envie de shifter sont dans un tableau à une dimension (960) et mon tableau est de 960*8 ... mais le soucis c'est que le shift doit être un entier , alors que moi je voulais chifter chaque ligne avec l'élément correspondant dans mon vecteur shift
    donc, je ne peux pas faire :

    dxnroll = np.roll(a, shift, axis=1) ## shift étant un tableau !!!!

    Comme y'a beaucoup de données, quelle solution me proposez vous ??
    Ou un petit bout de code pour que je chiffte chaque ligne avec le nombre correspondant dans mon vecteur ??
    Merci déjà pour votre réponse

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Juste une idée comme ça, je dis pas que ça soit le plus efficace:

    1) Générer toutes les rotations possibles de tout le tableau
    2) Utiliser numpy.choose pour sélectionner les lignes désirées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rolls = [np.roll(a, i, axis=1).T for i in range(np.size(a, 1))]
    dxnroll = np.choose(shift, rolls).T
    Les transpositions, c'est pour avoir des formats compatibles pour choose.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut.
    Pourquoi pas un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import numpy as np
    a = np.diag(np.ones(4))
    shift_tab = range(0,-np.size(a, 1),-1)
    for i, shift in enumerate(shift_tab):
        a[i,:] = np.roll( a[i,:], shift)

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    La solution de __dardanos__ m'a donné une autre idée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dxnroll = np.empty_like(a)
    for i in range(np.size(a,1)):
        lines = np.where(shift == i)[0]
        dxnroll[lines,:] = np.roll(a[lines,:], i, axis=1)
    Cela devrait être la plus efficace des solutions proposées jusqu'ici s'il y a beaucoup de lignes.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par dividee Voir le message
    La solution de __dardanos__ m'a donné une autre idée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dxnroll = np.empty_like(a)
    for i in range(np.size(a,1)):
        lines = np.where(shift == i)[0]
        dxnroll[lines,:] = np.roll(a[lines,:], i, axis=1)
    Cela devrait être la plus efficace des solutions proposées jusqu'ici s'il y a beaucoup de lignes.
    les deux premiers ne marchaient pas !!
    le dernier marche, mais ne me fait pas ce que je veux !!
    le vecteur shift c'est un vecteur tout a fait indépendant de a !!!
    je veux shifter les éléments des lignes par les valeurs correspondantes dans le vecteur shift ! puisqu'ils ont la meme dimension en ligne, je ne vois pas pour quoi ne n'y arrive pas !!!
    donc, prenons exemple : a[0,:] shifté par shift[0]
    a[1,:] shifté par shift[1] ...etc

    et mon code c'était :

    for g in range(shift.shape()):
    rolls = np.roll(a[g,:], shift[g], axis=1)

    l'erreur : TypeError: 'tuple' object is not callable !!!

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Je pense que tu cherches à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for g in range(np.size(shift)):
        rolls = np.roll(a[g,:], shift[g])
    Tu te rapproches de ma solution. Pour la tester, copie/colle tout le code posté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import numpy as np
     
    a = np.diag(np.ones(4))
    shift_tab = range(0,-np.size(a, 1),-1)
    print "Tableau original :\n", a
     
    for i, shift in enumerate(shift_tab):
        a[i,:] = np.roll( a[i,:], shift)
    print u"\nTableau 'shifté' :\n", a

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    et ca marche,
    au départ il l'a considéré comme un tuple pour je ne sais quelle raison !!
    mais j'ai réessayé avec modification de je ne sais quoi, et ça marche !!
    thanks

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Citation Envoyé par Lyly87 Voir le message
    les deux premiers ne marchaient pas !!
    le dernier marche, mais ne me fait pas ce que je veux !!
    le vecteur shift c'est un vecteur tout a fait indépendant de a !!!
    je veux shifter les éléments des lignes par les valeurs correspondantes dans le vecteur shift ! puisqu'ils ont la meme dimension en ligne, je ne vois pas pour quoi ne n'y arrive pas !!!
    Je pense qu'on avait bien compris. Les points d'exclamation ça rend pas les choses plus claires.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 36
    Points : 15
    Points
    15
    Par défaut
    coucou dividee,
    ne fais pas attention aux points d'exclamation ,
    c'est une habitude que j'ai de l'écrire, même si je ne veux rien dire avec ..
    c'est juste quand je n'arrive pas a un résultat que je fais ça , sans aucune intention derrière
    merci encore pour ton aide

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Modifier un tableau dans un XML avec Python
    Par Peter_TLSE dans le forum Général Python
    Réponses: 4
    Dernier message: 07/04/2014, 15h54
  3. Affichage d'un script python dans un tableau php
    Par Taylor08 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2014, 10h15
  4. Réponses: 4
    Dernier message: 10/10/2003, 18h04
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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