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 :

Remplir des lignes et colonnes d'un array avec des boucles


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Remplir des lignes et colonnes d'un array avec des boucles
    Bonjour à tous,

    Petit nouveau dans le monde Python, j'aurai besoin de vos lumières sur un léger soucis que je rencontre.

    J'ai un array contenant des données d'aires défini comme suit:

    Cet array possède une seule dimension (106 lignes).
    J'aimerai utiliser ce vecteur pour calculer un deuxième paramètre définis comme:

    Ici je veux donc que g soit en deux dimensions avec le nombre de lignes correspondant à la dimension de A (106) et un nombre de colonne dépendant du nombre de n que je veux prendre. Dans mon cas, n varie de 2 à 6. Je souhaite donc que mon array g soit de dimension (106, 5). Voici la boucle que j'utilise pour calculer g:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    i=0
    while i <= len(A)-1:
      for n in range(2,6):
        g[i][n-2] = (np.sqrt(A[i]/pi))/n    
      i += 1    
    break
    Cependant j'ai un message d'erreur m'indiquant: 'numpy.float64' object does not support item assignment
    J'ai donc modifié mon code pour avoir ce qui amène un nouveau message d'erreur : IndexError: too many indices for array

    Un peu d'aide serait la bienvenue,
    Merci d'avance

  2. #2
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    La bonne habitude à prendre avec numpy :

    1) Lorsqu'on connait la taille du tableau final, et bien d'abord le créer avec la bonne taille. Quitte à le remplir de 0 (la fonction np.zeros fait ca très bien)
    2) Eviter au maximum d'utiliser des boucles pour parcourir chaque élément du tableau, mais plutot utiliser les notations slicées pour faire des opérations directement sur des tableaux au des bouts de tableaux entiers.
    Notamment si vous avez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A=np.array([1,2,3,4])
    B=np.array([1,1,1,1])
    Pour calculer leur somme, vous ne faites pas de boucle for, vous écrivez directement
    Là est toute la force de numpy !

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    656
    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 : 656
    Points : 1 153
    Points
    1 153
    Par défaut
    Salut, et bienvenu!

    Je travaillerais avec des matrices, soit des numpy 2D arrays. Si A est de dimension 106,1, et si 1/n est de dimension 1,5 alors le produit matriciel des deux donne ce que vous recherchez. On aurait alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A = data_lac[:, 0] # Vérifiez que A.shape retourne (106,1)
    n_inv = np.hstack([1 / i for i in range(2, 7, 1)])
    g = np.dot(np.sqrt(A) / np.pi, n_inv)
    J'utilise np.hstack() qui permet, comme son nom l'indique, d'empiler horizontalement des éléments (donc un vecteur ligne). A l'intérieur j'utilise une liste en intention pour créer les inverses de n, de 2 à 6 car le dernier élément de range n'est pas pris en compte (grooooosse source d'erreurs...).

    Pour la pure forme, évitez au possible de déclarer des variables avec une seule lettre. Vous conviendez que A ce n'est pas ce qu'il y a de plus explicite. Quand vous vous relirez, ou mieux partagerez votre code, ce sera pas évident de retrouver ce que c'est. Il est préférable de prendre l'habitude d'utiliser des noms ayant un sens rien qu'a la lecture. :)

    Ciao

    J

Discussions similaires

  1. Tache avec des lignes et colonne
    Par espoireproxy dans le forum SharePoint
    Réponses: 3
    Dernier message: 28/12/2010, 08h18
  2. Boucle sur des lignes et colonnes
    Par Livet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2007, 19h45
  3. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  4. [VBA-E] Séparer les colonnes d'une listbox par des lignes?
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2006, 14h03
  5. [T-SQL] Convertir des lignes en colonne
    Par cortex93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/12/2005, 16h17

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