Bibliothèque aléatoire | Générer des nombres aléatoires en Python

Contenu

Le monde est gouverné par le hasard. Le hasard nous traque tous les jours de notre vie.

– Paul Auster

Les nombres aléatoires nous entourent dans le monde de la science des données. De temps en temps, j'ai besoin de trouver rapidement des nombres aléatoires pour mener une expérience de pensée ou pour démontrer un concept à un public, mais sans avoir à télécharger de grands ensembles de données.

De la création de données factices à la reproduction aléatoire des données à des fins d'apprentissage et de test ou à l'initialisation des poids d'un réseau de neurones, nous générons des nombres aléatoires tout le temps en python. Vous allez adorer ce concept une fois que vous aurez pris le coup après cet article.

Featured_image-1-6854131

À mon avis, La génération de nombres aléatoires est un sujet que tout spécialiste de la science des données devrait connaître. Je vais vous expliquer tout le processus de génération de nombres aléatoires en Python ici et le démontrer également à l'aide de différentes techniques.

Nouveau sur Python? Ces deux cours gratuits vous permettront de démarrer:

Table des matières

  • Bibliothèque aléatoire
  • Semer des nombres aléatoires
  • Générer des nombres aléatoires dans une plage
  • Tirer au hasard d'une liste
  • Mélanger une liste
  • Génération de nombres aléatoires selon des distributions

Générer des nombres aléatoires en Python à l'aide de la bibliothèque aléatoire

Ce sont les bonnes nouvelles: il existe plusieurs façons de générer des nombres aléatoires en python. La méthode la plus simple consiste à utiliser Aléatoire module. C'est un module intégré à Python et ne nécessite pas d'installation. Ce module utilise un générateur de nombres pseudo-aléatoires (PRNG) connu comme Tornade Mersenne générer des nombres aléatoires.

Un générateur de nombres pseudo-aléatoires est un générateur de nombres aléatoires déterministe. Ne génère pas de nombres vraiment aléatoires. Prenez un nombre en entrée et générez un nombre aléatoire pour celui-ci.

Noter: N'utilisez pas le Aléatoire module pour générer des nombres aléatoires pour des raisons de sécurité. Pour des utilisations cryptographiques et de sécurité, vous pouvez utiliser le mystères module que vous utilisez vrais générateurs de nombres aléatoires (BLANCHE).

Semer des nombres aléatoires

Comme nous l'avons vu dans la section précédente, le module aléatoire prend un nombre en entrée et génère un nombre aléatoire pour lui. Cette valeur initiale est connue sous le nom de graine et la procédure est connue sous le nom de graine..

Les nombres que nous générons à l'aide de générateurs de nombres pseudo-aléatoires sont déterministes. Cela signifie qu'ils peuvent être répliqués en utilisant la même graine..

Comprenons avec un exemple:

importer au hasard

imprimer('Random Number 1=>',aléatoire.aléatoire())
imprimer('Random Number 2=>',aléatoire.aléatoire())

Ici, j'utilise la fonction aléatoire () qui génère un nombre aléatoire dans la plage [0.0, 1.0]. Notez ici que je n'ai pas mentionné la valeur de la graine. Par défaut, l'heure système actuelle en millisecondes est utilisée comme graine. Jetons un coup d'oeil à la sortie.

rn1-8128994

Les deux nombres sont différents en raison du changement de temps pendant l'exécution de la première instruction à la deuxième instruction. Voyons ce qui se passe si nous plantons les générateurs avec la même valeur:

graine.aléatoire(42)
imprimer('Random Number 1=>',aléatoire.aléatoire())

graine.aléatoire(42)
imprimer('Random Number 2=>',aléatoire.aléatoire())

rn2-2933479

Nous obtenons les mêmes nombres ici. C'est pourquoi les générateurs de nombres pseudo-aléatoires sont déterministes et ne sont pas utilisés à des fins de sécurité car toute personne possédant la graine peut générer le même nombre aléatoire.

Générer des nombres aléatoires dans une plage

Jusqu'à maintenant, nous savons comment créer des nombres aléatoires dans la plage [0.0, 1.0]. Mais, Et si nous devions créer un nombre dans une plage autre que celle-ci?

Une façon est de multiplier et d'ajouter des nombres au nombre renvoyé par le Aléatoire() une fonction. Par exemple, aléatoire.aléatoire () * 3 + 2 renverra les nombres dans la plage [2.0, 5.0]. Cependant, c'est plus une solution de contournement, pas une solution directe.

Ne t'inquiète pas! Le module aléatoire vous soutient ici. Fournit uniforme() Oui sortir ensemble () fonctions que nous pouvons utiliser à cette fin. Comprenons un par un.

uniforme()

La fonction uniforme () du module aléatoire prend les valeurs de début et de fin d'une plage comme arguments et renvoie un nombre à virgule flottante aléatoire dans la plage. [départ, fin]:

imprimer('Random Number in range(2,8)=>', aléatoire.uniforme(2,8))

rn3-9890086

sortir ensemble ()

Cette fonction est similaire à la fonction uniforme (). La seule différence est que la fonction uniforme () renvoie des nombres aléatoires à virgule flottante et la fonction randint () renvoie un entier. Renvoie également le nombre dans la plage [départ, fin]:

imprimer('Random Number in a range(2,8)=>', random.randint(2,8))

rn4-9834899

Tirer au hasard d'une liste

choix() Oui options () sont les deux fonctions fournies par le module aléatoire que nous pouvons utiliser pour sélectionner des valeurs au hasard dans une liste. Les deux fonctions prennent une liste comme argument et en sélectionnent aléatoirement une valeur. Pouvez-vous deviner quelle est la différence entre choix() Oui options () il est?

choix() il suffit de choisir une seule valeur dans une liste, tandis que options () choisir plusieurs valeurs dans une liste avec remplacement. Une grande chose à propos de ces fonctions est qu'elles fonctionnent également sur une liste qui contient des chaînes. Voyons-les en action:

a=[5, 9, 20, 10, 2, 8]
imprimer('Randomly picked number=>',choix.aléatoire(une))
imprimer('Randomly picked number=>',choix.aléatoires(une,k=3))

rn5-5845800

Comme on peut le constater, choix() a renvoyé une valeur unique de une Oui options () a renvoyé trois valeurs de une. Ici, k est la longueur de la liste renvoyée par options ().

Une autre chose que vous remarquerez peut-être dans les réponses renvoyées par options () est que chaque valeur n'apparaît qu'une seule fois. Vous pouvez augmenter la probabilité que chaque valeur soit choisie en passant un tableau comme pesos Al options () une fonction. Ensuite, augmentons la probabilité de 10 jusqu'à trois fois de plus et voyons les résultats:

pour _ dans la plage(5):
   imprimer('Randomly picked number=>',choix.aléatoires(une,poids=[1,1,1,3,1,1],k=3))

rn6-6712715

Ici, on peut voir ce qui s'est passé 10 à chaque tirage de la liste. Il y a aussi goûter() fonction dans un module aléatoire qui fonctionne de manière similaire à options () fonction mais prend des échantillons aléatoires d'une liste pas de remplacement.

Mélanger une liste

Disons que nous ne voulons pas sélectionner des valeurs dans une liste, mais nous voulons juste les réorganiser. Nous pouvons le faire en utilisant le mélanger() fonction de module aléatoire. Ce mélanger() La fonction prend la liste comme argument et mélange la liste à la place:

imprimer('Original list=>',une)
aléatoire.shuffle(une)
imprimer('Shuffled list=>',une)

rn7-2325520

Noter: la fonction aléatoire () ne renvoie pas de liste.

Génération de nombres aléatoires selon des distributions

Une caractéristique plus surprenante du module aléatoire est qu'il nous permet de générer des nombres aléatoires basés sur différentes distributions de probabilité. Il existe différentes fonctions comme gauss(), expovariable (), etc., qui nous aident à le faire.

Si vous n'êtes pas familier avec les distributions de probabilité, je vous conseille de lire cet article: 6 Distributions de probabilités communes que tout professionnel de la science des données devrait connaître.

gauss()

Commençons par la distribution de probabilité la plus courante, c'est-à-dire, distribution normale. gauss() est une fonction du module aléatoire utilisé pour générer des nombres aléatoires selon une distribution normale. Prendre la moyenne et l'écart type comme argument et renvoyer un nombre aléatoire:

pour _ dans la plage(5):
   imprimer(au hasard.gauss(0,1))

rn8-2090763

rn10-1757635

Ici, tracé 1000 nombres aléatoires générés par le gauss() fonction pour moyenne égale à 0 et l'écart type comme 1. Vous pouvez voir ci-dessus que tous les points sont distribués autour de la moyenne et peu distribués puisque l'écart type est 1.

expovariable ()

La distribution exponentielle est une autre distribution de probabilité très courante que vous trouverez. Les expovariable () La fonction permet d'obtenir un nombre aléatoire selon la distribution exponentielle. Il prend la valeur de lambda comme argument et renvoie une valeur de 0 à l'infini positif si lambda est positif, et de l'infini négatif à 0 si lambda est négatif:

imprimer('Random number from exponential distribution=>',expovariable.aléatoire(10))

rn9-7677609

Remarques finales

J'utilise souvent des nombres aléatoires pour créer des ensembles de données factices et pour un échantillonnage aléatoire. J'aimerais savoir comment vous utilisez les nombres aléatoires dans vos projets, alors commentez ci-dessous avec vos pensées et partagez-les avec la communauté.

Si vous avez trouvé cet article informatif, Partagez-le avec vos amis et commentez ci-dessous vos questions et commentaires. J'ai répertorié ci-dessous quelques articles étonnants liés à Python et à la science des données pour votre référence:

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données