Nombre aléatoire en python

Bonjour à tous,

J'essaie de découvrir Python et je n'arrive pas à trouver comment faire pour générer aléatoirement deux valeurs avec respectivement une probabilité p pour l'une et une probabilité (1-p) pour l'autre.

Par exemple : générer aléatoirement 1 et -1 avec pour probabilités respectives 0,3 et 0,7.

Quelqu'un pourrait-il m'aider ?
Merci d'avance.

Réponses

  • La fonction random du module random te donne un flottant compris entre $0$ et $1$ (et qui mime une distribution uniforme). S'il est plus petit que $p$, tu renvoies $1$ ; sinon, tu renvoies $-1$.
  • Des exemples :
    [-1,1][random()<p]
    2*(random()<p)-1
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Merci de vos réponses à tous le deux. Je crains de ne pas avoir le niveau pour comprendre la version condensée de Nicolas. Mais en suivant les consignes de Math Coss j'ai rédigé la fonction suivante :
    import random
    
    def saut(p) :
        x=random.random()
        if x<=p :
            s=1
        else:
            s=-1
        return s
    

    Pouvez-vous me confirmer que c'est bien cela ?
  • C'est ce que j'aurais fait à epsilon près. C'est bien d'avoir la réponse de Nicolas Patrois pour gagner en concision. L'expression « random()<p » est un booléen qui vaut « True » ou « False ». Ce que nous dit Nicolas, c'est que True est 1 et False est 0. Vérification (Python 2.7) :
    >>> True==1
    True
    >>> False==0
    True
    >>> True==1.2
    False
    >>> True==2
    False
    
    Comment comprendre « [-1,1][random()<p] » ? Python tire un nombre entre $0$ et $1$ ; s'il est plus petit que p, il renvoie 1 et [-1,1][1] est le terme d'indice 1 de la liste [-1,1], c'est-à-dire 1 ; sinon, il renvoie 0 et [-1,1][0] est le terme d'indice 0 de la liste, c'est-à-dire -1. (Il est implicitement supposé qu'il y avait « from random import random » plus haut.)

    Pour l'autre instruction, c'est du même tonneau : le résultat de la parenthèse vaut $0$ ou $1$ selon que le résultat du tirage est plus grand ou plus petit que $p$, ce qui donne pour résultat du calcul $2\times0-1=-1$ ou $2\times1-1=1$.
  • Je ne cherchais pas du tout de ce côté là pour comprendre les versions concises de Nicolas... Mais cette fois-ci c'est bien compris.

    Merci encore à tous les deux !
Connectez-vous ou Inscrivez-vous pour répondre.