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 :

Générer un tableau nligne de taille variable


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut Générer un tableau nligne de taille variable
    Bonjour,

    je n'arrive pas à générer un tableau à deux dimension avec des tailles de lignes différentes, j'ai peut être mal cherché mais je ne trouve rien pour m'aiguiller.
    En utilisant numpy.array je comprends.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d = 8
    e = 3
    b = np.zeros((d,e), dtype=int)
    Mais comment faire pour avoir des nombres de colonnes qui change à chaque ligne ?

    Je me suis dit comme avec une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    b = np.zeros(b, dtype=int)
    for i in range(len(b)):
        b[i] = np.zeros(int(uniform(d,e)))
    Je suis sur que c'est possible, mais avec quelle méthode, auriez-vous des pistes. Car tout ce que je trouve avec "ValueError: setting an array element with a sequence." me disent que qu'il ne faut pas faire ce que je veux...

    Merci

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Apparemment le premier argument de np.zeros doit être un entier ou tuple d'entiers donc au premier abord ça n'a pas l'air d'être possible mais bon c'est à vérifier/confirmer...

    Pourquoi ne pas utiliser np.array ?


    PS : Je crois qu'avec des lignes de tailles différentes c'est moins performant...

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Salut,

    Il faut ouvrir la documentation de numpy pour savoir ce qu'est un ndarray (le choses fabriquées par np.zeros,np.array,...):
    An array object represents a multidimensional, homogeneous array of fixed-size items.
    Puis on réfléchit un peu à ce que peut être la représentation efficace d'un tableau à plusieurs dimensions dans un espace mémoire à une dimension (ou on lit la documentation de numpy).

    Si le tableau a MxN éléments, on va allouer MxN(xtaille de l'item) octets contigus, de sorte à ce que pour chaque case n on sache faire correspondre le (i, j) correspondant et réaliser un accès direct.

    Un tableau où il y a des "lignes" de longueur différentes n'est pas "homogène". C'est une juste une liste d'objets/séquence où il n'y a pas d'accès direct au n-ième élément.
    Une liste de listes Python ou un tableau de pointeurs numpy (à 1-dimension) suffisent pour représenter çà.

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

  4. #4
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    merci des précisions, oui donc le machin (^^) ndarray est une matrice, ou un tableau de type matrice si je comprend bien.
    En restant sur l'option liste de liste comme suggéré, possible solution pourrait ressembler à cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from random import uniform
    d = 1
    e = 5
    b = 0
    m = [1]*5
    for i in range(5):
        b = int(uniform(d,e))
        m[i] = [i]*int(uniform(d,e))

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    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 716
    Par défaut
    Citation Envoyé par Aelurus_ Voir le message
    En restant sur l'option liste de liste comme suggéré, possible solution pourrait ressembler à cela ?
    A vous de tester pour voir si çà répond à votre besoin.

    Une liste de séquences élémentaire est la liste des lignes d'un fichier.
    Une ligne étant une chaine de caractères de longueur variable, on se retrouve à écrire L[i][j] pour accéder au jème caractère de la ième ligne.

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

  6. #6
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Mais faire une liste de tableau par contre ça fonctionne, récupérer des tableaux numpy ma parait plus pratique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    d = 1
    e = 23
    long = [1.,2.,3,5,1,0,0]
    nom = [0]*len(long)
    for i in range(len(long)):
        nom[i]=np.array([int(uniform(d,e))]*int(uniform(d,e)))


    Comme cela je conserve la souplesse des tableaux. J'ai un peu de mal à identifier la différence entre une liste de listes et le tableau de pointeurs numpy. Sauf peut être si par exemple on fait une addition, si je fais une addition sur deux objets d'une liste ils vont s’accoler ( 1+2 = 12) alors que deux objets d'un tableau eux vont bien s'additionner.

    Je suis absolument par sur de ce que dit.

    Merci

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

Discussions similaires

  1. retourner un tableau avec un taille variable dans une classe
    Par paulbach dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/11/2015, 10h55
  2. Réponses: 4
    Dernier message: 25/04/2015, 15h51
  3. Réponses: 10
    Dernier message: 11/05/2014, 15h19
  4. Classe pour tableau d'entiers à taille variable
    Par Jéjé34 dans le forum Débuter
    Réponses: 15
    Dernier message: 28/03/2013, 20h27
  5. Comment obtenir un tableau à taille variable ?
    Par marsupilami34 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 15h03

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