Réponses:
Essayer:
from random import randrange
print(randrange(10))
Plus d'informations: http://docs.python.org/library/random.html#random.randrange
secrets
module pour de meilleurs nombres aléatoires. Référence: docs.python.org/3/library/random.html
import random
print(random.randint(0,9))
random.randint(a, b)
Renvoie un entier aléatoire N tel que a <= N <= b.
Documents: https://docs.python.org/3.1/library/random.html#random.randint
randint(0,9)
-à- dire qu'elle ne renverra jamais 9). Cela n'est pas reflété dans la documentation en ligne, mais c'est dans l'aide intégrée.
Essaye ça:
from random import randrange, uniform
# randrange gives you an integral value
irand = randrange(0, 10)
# uniform gives you a floating-point value
frand = uniform(0, 10)
Le secrets
module est nouveau dans Python 3.6. C'est mieux que le random
module pour la cryptographie ou la sécurité.
Pour imprimer au hasard un entier dans la plage inclusive 0-9:
from secrets import randbelow
print(randbelow(10))
Pour plus de détails, voir PEP 506 .
Choisissez la taille du tableau (dans cet exemple, j'ai choisi la taille 20). Et puis, utilisez ce qui suit:
import numpy as np
np.random.randint(10, size=(1, 20))
Vous pouvez vous attendre à voir une sortie de la forme suivante ( différents entiers aléatoires seront retournés chaque fois que vous l'exécuterez; par conséquent, vous pouvez vous attendre à ce que les entiers dans le tableau de sortie diffèrent de l'exemple donné ci-dessous ).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
Essayez ceci random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
J'essaierais l'une des options suivantes:
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
3.> random.randrange
from random import randrange
X3 = [randrange(10) for i in range(15)]
print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
4.> random.randint
from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]
print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
La vitesse:
► np.random.randint est le plus rapide , suivi de np.random.uniform et random.randrange . random.randint est le plus lent .
► np.random.randint et np.random.uniform sont beaucoup plus rapides (~ 8 - 12 fois plus rapides) que random.randrange et random.randint .
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Remarques:
1.> np.random.randint génère des entiers aléatoires sur l'intervalle semi-ouvert [bas, haut).
2.> np.random.uniform génère des nombres uniformément répartis sur l'intervalle semi-ouvert [bas, haut).
3.> random.randrange (stop) génère un nombre aléatoire à partir de la plage (start, stop, step).
4.> random.randint (a, b) renvoie un entier aléatoire N tel que a <= N <= b.
5.> astype (int) convertit le tableau numpy en type de données int.
6.> J'ai choisi la taille = (15,). Cela vous donnera un tableau numpy de longueur = 15.
%timeit
marche dans votre environnement?
En cas de nombres continus randint
ou randrange
sont probablement les meilleurs choix, mais si vous avez plusieurs valeurs distinctes dans une séquence (c'est-à-dire a list
), vous pouvez également utiliser choice
:
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
fonctionne également pour un élément d'un échantillon non continu:
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
Si vous en avez besoin "cryptographiquement fort" il y a aussi un secrets.choice
en python 3.6 et plus récent:
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
random.sample
. Avec le remplacement, vous pouvez utiliser une compréhension avec choice
: par exemple pour une liste contenant 3 valeurs aléatoires avec remplacement:[choice(values) for _ in range(3)]
Alors que de nombreux articles montrent comment obtenir un entier aléatoire, la question d'origine demande comment générer un entier aléatoire s (pluriel):
Comment puis-je générer des entiers aléatoires entre 0 et 9 (inclus) en Python?
Pour plus de clarté, nous montrons ici comment obtenir plusieurs entiers aléatoires.
Donné
>>> import random
lo = 0
hi = 10
size = 5
Code
Entiers aléatoires multiples
# A
>>> [lo + int(random.random() * (hi - lo)) for _ in range(size)]
[5, 6, 1, 3, 0]
# B
>>> [random.randint(lo, hi) for _ in range(size)]
[9, 7, 0, 7, 3]
# C
>>> [random.randrange(lo, hi) for _ in range(size)]
[8, 3, 6, 8, 7]
# D
>>> lst = list(range(lo, hi))
>>> random.shuffle(lst)
>>> [lst[i] for i in range(size)]
[6, 8, 2, 5, 1]
# E
>>> [random.choice(range(lo, hi)) for _ in range(size)]
[2, 1, 6, 9, 5]
Exemple d'entiers aléatoires
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
Détails
Certains articles montrent comment générer nativement plusieurs entiers aléatoires. 1 Voici quelques options qui répondent à la question implicite:
random.random
renvoie un flottant aléatoire dans la plage[0.0, 1.0)
random.randint
retourne un entier aléatoire N
tel quea <= N <= b
random.randrange
alias derandint(a, b+1)
random.shuffle
mélange une séquence en placerandom.choice
retourne un élément aléatoire de la séquence non viderandom.choices
retourne les k
sélections d'une population (avec remplacement, Python 3.6+)random.sample
retourne k
des sélections uniques d'une population (sans remplacement): 2Voir également l' exposé de R. Hettinger sur le découpage et l'alias en utilisant des exemples du random
module.
Voici une comparaison de quelques fonctions aléatoires dans la bibliothèque standard et Numpy:
| | random | numpy.random |
|-|-----------------------|----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
Vous pouvez également convertir rapidement l'une des nombreuses distributions de Numpy en un échantillon d'entiers aléatoires. 3
Exemples
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1 À savoir @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth mentionne ce module affichant un entier. 3 Démontré par @Siddharth Satpathy
si vous souhaitez utiliser numpy, utilisez ce qui suit:
import numpy as np
print(np.random.randint(0,10))
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1
Pour obtenir une liste de dix échantillons:
>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
Génération d'entiers aléatoires entre 0 et 9.
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
Production:
[4 8 0 4 9 6 9 9 0 7]
La meilleure façon est d'utiliser la fonction d'importation aléatoire
import random
print(random.sample(range(10), 10))
ou sans aucune importation de bibliothèque:
n={}
for i in range(10):
n[i]=i
for p in range(10):
print(n.popitem()[1])
ici, le popitems supprime et renvoie une valeur arbitraire du dictionnaire n
.
Il s'agit plus d'une approche mathématique mais cela fonctionne à 100% du temps:
Disons que vous souhaitez utiliser la random.random()
fonction pour générer un nombre entre a
et b
. Pour ce faire, procédez comme suit:
num = (b-a)*random.random() + a;
Bien sûr, vous pouvez générer plus de nombres.
Depuis la page de documentation du module aléatoire :
Avertissement: Les générateurs pseudo-aléatoires de ce module ne doivent pas être utilisés à des fins de sécurité. Utilisez os.urandom () ou SystemRandom si vous avez besoin d'un générateur de nombres pseudo-aléatoires cryptographiquement sécurisé.
random.SystemRandom , qui a été introduit dans Python 2.4, est considéré comme cryptographiquement sécurisé . Il est toujours disponible dans Python 3.7.1 qui est à jour au moment de l'écriture.
>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'
Au lieu de string.digits
, range
pourrait être utilisé par certaines des autres réponses avec peut-être une compréhension. Mélangez et assortissez selon vos besoins.
OpenTURNS permet non seulement de simuler les entiers aléatoires mais également de définir la distribution associée à la UserDefined
classe définie.
Ce qui suit simule 12 résultats de la distribution.
import openturns as ot
points = [[i] for i in range(10)]
distribution = ot.UserDefined(points) # By default, with equal weights.
for i in range(12):
x = distribution.getRealization()
print(i,x)
Cela imprime:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
Les crochets sont là parce que x
c'est Point
en 1 dimension. Il serait plus facile de générer les 12 résultats en un seul appel à getSample
:
sample = distribution.getSample(12)
produirait:
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
Plus de détails sur ce sujet sont ici: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
J'ai eu plus de chance avec cela pour Python 3.6
str_Key = ""
str_RandomKey = ""
for int_I in range(128):
str_Key = random.choice('0123456789')
str_RandomKey = str_RandomKey + str_Key
Ajoutez simplement des caractères comme 'ABCD' et 'abcd' ou '^! ~ = -> <' pour modifier le pool de caractères à partir duquel vous souhaitez modifier, changez la plage pour modifier le nombre de caractères générés.