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 :

Initialisation numpy array avec fonction


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut Initialisation numpy array avec fonction
    Bonjour à tous,

    Je dois trouver un moyen d'initialiser un array numpy avec le résultat d'une fonction et ce sans utiliser de boucle for.

    (Ou créer une liste avec les résultats de cette fonction, donc différents pour chaque élément, que l'on peut ensuite facilement transformer en array)

    Bon c'est pour un module open classroom c'est une contrainte pédagogique de ne pas utiliser de boucle for.

    Après avoir cherché une après midi je ne vois pas du tout dans quelle direction chercher.

    Alors si quelqu'un a une piste menant vers la solution dans le genre astuce python numpy qui fait plusieurs choses à la fois merci

    de me l'indiquer pour me mettre dans la bonne direction.

    Merci du coup de main.

    P.G

  2. #2
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Si ta fonction est de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f(...):
       ...
       return a,b,c,d,e,f
    Et que tu veux stocker les valeurs de retour (a,b,c,d,e et f) dans un array, il suffit de faire:
    ou tu remplaces ... par les valeurs des différents arguments (ou par rien s'il n'y a pas d'argument).

    En fait la fonction renvoie un tuple composé des différentes valeurs de retour, et la fonction __init__() de la classe numpy peut prendre en argument aussi bien une liste qu'un tuple!

  3. #3
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut
    Bonjour

    Merci pour la réponse. Le souci c'est que la fonction fait disons un tirage aléatoire et donc on doit initier le tableau array avec un grand nombres de ces tirages et ce sans utiliser de boucle for.

    Donc utiliser quelque chose du genre (en remplacant .arange):

    x = np.arange('maFonction',nombre d'éléments) ou maFonction est calculée pour chacun des éléments.

    Merci encore.

    P.G

  4. #4
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    Peux-tu me donner un lien vers l'énoncé, car je ne suis pas sûr d'avoir compris tout ce dont il est question !
    Si j'ai bien compris, en reprenant l'exemple du tirage aléatoire, ce serait un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from random import randint
    def fonction():
      return randint(0,100)
    liste=array([fonction() for k in range(100)])
    Mais il se cache tout de même une boucle for dans la création de la liste !

  5. #5
    P.G
    P.G est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Par défaut
    Merci beaucoup pour le coup de main.

    Oui en effet le problème c'est la condition de ne pas utiliser de boucle for.

    Voilà l'énoncé :

    Description

    Pour cet exercice, je vous demande simplement de refaire ce que nous avons fait dans le chapitre deux, mais en utilisant cette fois Numpy. Vous allez donc simuler le problème de Monty Hall, et visualiser les résultats de vos simulations. Vous devrez assembler les deux fonctions play_game et play au sein d'une même fonction. Cette fonction devra générer un tableau Numpy des gains du joueur, et non pas une list.

    Vous ne devrez pas faire appel à la librairie random de Python (mais vous utiliserez la librairie random de Numpy).

    Votre code ne doit pas comporter de boucle (pas de for) dans la partie calculatoire. Pour cela, vous devrez sûrement vous creuser un peu la tête. N'oubliez pas que Numpy peut très rapidement comparer les éléments de deux tableaux un à un.

    Vous devrez intégrer cette fonction dans un module Python. Votre notebook ne doit comporter aucune définition de fonction.

    Votre notebook doit s'exécuter et générer les mêmes graphiques que ceux du cours.


    En fait le problème de Monty_Hall est résolu dans la fonction play() et il faut la réaliser 10 000 fois par exemple (et donc sans boucle for). Actuellement je recherche du coté de nparray.fromfunction mais c'est pour des tableaux 2D.

    Merci encore du coup de main.

    P.G

  6. #6
    Membre confirmé Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Par défaut
    En fait, on peut bien utiliser cette fonction pour des tableaux à une dimension:
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=np.fromfunction(lambda i: i == 0, (3,), dtype=int)
    ce qui renvoie array([ True, False, False])
    Il faut juste faire attention à placer un tuple en 2ème argument de np.fromfunction ( un tuple à une dimension s'écrit (3,) pour faire la différence avec le chiffre 3).
    C'est donc la taille de ce tuple qui détermine le nombre de dimensions du tableau.
    Remarque:
    ce code peut se faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f(i):
     return i==0
    liste=np.fromfunction(f, (3,), dtype=int)

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

Discussions similaires

  1. probleme de tableau array avec la fonction array_push()
    Par carmen256 dans le forum Langage
    Réponses: 13
    Dernier message: 07/09/2009, 17h21
  2. initialisation array avec memset
    Par nocolach dans le forum C++
    Réponses: 10
    Dernier message: 14/08/2009, 12h09
  3. [JavaScript] [SRC] array_map() modification de tous les elements d'un array avec une fonction
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/07/2009, 13h28
  4. Problème avec fonction et array à 2 dimensions
    Par wrm8787 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/02/2009, 16h24
  5. Réponses: 2
    Dernier message: 21/11/2008, 11h08

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