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 :

Optimisation de données


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut Optimisation de données
    Bonjour,

    Je veux définir une fonction avec plusieurs éléments, par exemple:

    def function((a,b,c), (d, e, f), (m, n, o, p, q), (r, s, t, u, v)):
    où les item (r, s, t, u, v) correspondent respectivement à une probabilité pour chacun des items (m, n, o, p, q)

    la fonction effectue différents calculs et donne un résultat "z".

    Je veux créer une boucle de façon à obtenir un "z" maximum en utilisant un (m, n, o, p, q) de départ et en faisant varier les données par 0.10 à chaque itération.

    La somme des items (m, n, o, p, q) doit toujours être égale à 1 et je veux incrémenter les valeurs de 0.10 uniquement, pour limiter les possibilités:

    Exemples de valeurs permises: (0.1, 0.2, 0.4, 0.1, 0.2), ....(0.3, 0.0, 0.2, 0.2, 0.3)...et ainsi de suite.....

    Chaque itération me donnera un nouveau "z", et je désire sortir de la boucle avec le plus grand "z".....

    Comment faire varier uniquement les données (m, n, o, p, q)...

    Merci pour l'aide.

    Jacques

  2. #2
    Membre émérite
    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
    Par défaut
    Bonjour.

    Citation Envoyé par Jack_dev Voir le message
    Comment faire varier uniquement les données (m, n, o, p, q)...
    En utilisant un générateur et avec itertools.product, tu peux obtenir toutes les données d'entrées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import itertools
    from numpy import arange
     
     
    def get_one():
        items = arange(0.0, 1.0, 0.1)
        for x in itertools.product(items, repeat=5):
            if sum(x) == 1.0:
                yield x
     
     
    if __name__ == "__main__":
        for i, x in enumerate(get_one()):
            print(i, *x)
    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
    17
    18
    19
    20
    21
    22
    0 0.0 0.0 0.0 0.1 0.9
    1 0.0 0.0 0.0 0.2 0.8
    2 0.0 0.0 0.0 0.3 0.7
    3 0.0 0.0 0.0 0.4 0.6
    4 0.0 0.0 0.0 0.5 0.5
    5 0.0 0.0 0.0 0.6 0.4
    6 0.0 0.0 0.0 0.7 0.3
    7 0.0 0.0 0.0 0.8 0.2
    8 0.0 0.0 0.0 0.9 0.1
    9 0.0 0.0 0.1 0.0 0.9
    10 0.0 0.0 0.1 0.1 0.8
    11 0.0 0.0 0.1 0.2 0.7
    12 0.0 0.0 0.1 0.3 0.6
    13 0.0 0.0 0.1 0.4 0.5
    14 0.0 0.0 0.1 0.5 0.4
    15 0.0 0.0 0.1 0.6 0.3
    16 0.0 0.0 0.1 0.7 0.2
    17 0.0 0.0 0.1 0.8 0.1
    18 0.0 0.0 0.1 0.9 0.0
    19 0.0 0.0 0.2 0.0 0.8
    20 0.0 0.0 0.2 0.1 0.7
    ...

  3. #3
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut Optimisation de données (suite)
    Bonjour Dardanos,

    Merci pour le truc avec numpy. Ça semble si simple quand on s'y connait...

    Maintenant, pour chaque ligne d'entrée, je vais calculer un "Z" qui est le résultat de certains calculs sur les autres données. Je veux m'assurer que le résultat final soit le plus grand de tous les "Z" calculés avec toutes les lignes d'entrée obtenues à partir de numpy: autrement dit, optimiser le "Z".

    J'ai pensé obtenir le nombre de lignes fournies par numpy, l'utiliser pour faire tourner la boucle x fois, et toujours stocker le plus grand "Z"....sortir le résultat final.

    Il y a probablement une solution plus simple...

    Merci encore

  4. #4
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut Optimisation (encore suite)
    Bonjour,

    J'ai testé la fonction et je reçois un message d'erreur de syntaxe sur la dernière ligne: print (i, *x).

    J'utilise Python 2.7. Si j'enlève le * devant le x, ça fonctionne, mais le nombre de décimal est trop, comment fixer les décimales à 0.1?

    Merci

    Jacques

  5. #5
    Membre émérite
    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
    Par défaut
    En PYTHON2, print est une instruction ; en PYHTON3, c'est une fonction.
    Le module __future__ permet d'importer la fonction en PYTHON2.

    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
    #!/usr/bin/python2
    # -* coding: utf-8 -*-
    from __future__ import print_function
    import itertools
    from numpy import arange
     
    def get_one():
        items = arange(0.0, 1.0, 0.1)
        for x in itertools.product(items, repeat=5):
            if sum(x) == 1.0:
                yield x
     
    if __name__ == "__main__":
        for i, x in enumerate(get_one()):
            print(i, *x)
    Si tu débutes, pourquoi ne pas utiliser PYTHON3 ?

  6. #6
    Membre averti
    Homme Profil pro
    aucun relié à l'informatique
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : aucun relié à l'informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Par défaut
    Salut,

    Pourquoi le 2 au lieu du 3, simplement parce que j'utilise python dans le cadre d'une formation en finance et que tout le reste du matériel est en 2. C'est assez compliqué pour quelqu'un qui n'est pas programmeur, et en plus, je dois jongler avec deux logiciels différents: R et python!!!

    Jacques

Discussions similaires

  1. [AC-2007] Optimiser import données excel VBA
    Par mouadmagan dans le forum VBA Access
    Réponses: 5
    Dernier message: 18/03/2013, 15h11
  2. Réparer et optimiser les données par ligne de commande
    Par souissi_haythem dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 08/09/2010, 14h11
  3. Hashage & Optimisation stockage données
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2007, 23h20

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