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 :

Tirage aléatoire dans une loi binomiale lent


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club Avatar de m4rsu
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Bioinformaticien

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Tirage aléatoire dans une loi binomiale lent
    Bonjour,
    Je cherche un simuler un processus aléatoire en réalisant des tirages aléatoires dans une loi binomiale un très grand nombre de fois.
    En gros j'ai une population composé de deux éléménts à une fréquence différentes, et je cherche à rééchantillonner ma population un très grand nombre de fois (1000000) pour la faire évoluer.

    J'ai utilisé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pos["freq"] = sum(np.random.binomial(1,pos["freq"], 2*param["popSize"])) / (2*param["popSize"])
    Cela fonctionne très bien, mais je réalise cette opération tellement souvent, que mon programme est très long.
    J'ai profilé le code avec cProfiler, et c'est bien cette ligne qui prend le plus de temps : la somme prend beaucoup de temps ainsi que le tirage dans la binomiale.

    Je cherche donc si il y a moyen de faire plus efficace, sans succès pour le moment .

    Quelqu'un aurait une idée ?

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le problème est-il déjà résolu?

    Sinon, la solution la plus simple pour accélérer le calcul fait 1000000 de fois, est de calculer en avance les probabilités d'avoir 0 à n éléments A (prob=p% dans la population) dans un échantillon de taille n.

    Mais même en ne faisant pas ça, un calcul en pur Python (sans numpy) est assez rapide. Par exemple pour 1000000 de tirages au hasard d'échantillons de taille 20 dans une population contenant 10% d'éléments recherchés, se fait en moins de 5 secondes.

  3. #3
    Candidat au Club Avatar de m4rsu
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Bioinformaticien

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé la solution ce matin.

    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum(np.random.binomial(1,pos["freq"], 2*param["popSize"]))
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    np.random.binomial(2*param["popSize"], pos["freq"])
    .

    Du coup au lieu de récupérer un vecteur de 0 et de 1, je récupère directement la somme.

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

Discussions similaires

  1. Marche aléatoire pour une loi binomiale
    Par vallah dans le forum Calcul scientifique
    Réponses: 0
    Dernier message: 30/05/2015, 17h13
  2. Réponses: 9
    Dernier message: 16/04/2015, 12h59
  3. Simuler un tirage aléatoire sur une loi exponentielle
    Par lobarth dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 27/06/2008, 10h41
  4. Tirage aléatoire dans une base donnée
    Par leloup84 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/01/2006, 17h13
  5. Selection aléatoire dans une fouchette de 10%
    Par RobertDeNiroZ dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2004, 10h22

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