Jawaban:
Mencoba:
from random import randrange
print(randrange(10))
Info lebih lanjut: http://docs.python.org/library/random.html#random.randrange
secrets
modul untuk angka acak yang lebih baik. Referensi: docs.python.org/3/library/random.html
import random
print(random.randint(0,9))
random.randint(a, b)
Kembalikan integer acak N sehingga a <= N <= b.
Documents: https://docs.python.org/3.1/library/random.html#random.randint
randint(0,9)
tidak akan pernah mengembalikan 9). Ini tidak tercermin dalam dokumentasi online, tetapi dalam bantuan bawaan.
Coba ini:
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)
from random import randint
x = [randint(0, 9) for p in range(0, 10)]
Ini menghasilkan 10 bilangan bulat pseudorandom dalam kisaran 0 hingga 9 inklusif.
The secrets
modul baru di Python 3.6. Ini lebih baik daripada random
modul untuk penggunaan kriptografi atau keamanan.
Untuk mencetak bilangan bulat secara acak dalam rentang inklusif 0-9:
from secrets import randbelow
print(randbelow(10))
Untuk detailnya, lihat PEP 506 .
Pilih ukuran array (dalam contoh ini, saya telah memilih ukuran menjadi 20). Dan kemudian, gunakan yang berikut ini:
import numpy as np
np.random.randint(10, size=(1, 20))
Anda dapat mengharapkan untuk melihat output dari bentuk berikut ( bilangan bulat acak yang berbeda akan dikembalikan setiap kali Anda menjalankannya; karenanya Anda dapat mengharapkan bilangan bulat dalam larik keluaran berbeda dari contoh yang diberikan di bawah ini ).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
Coba ini random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
Saya akan mencoba salah satu dari yang berikut:
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.> acak
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]
Kecepatan:
► np.random.randint adalah yang tercepat , diikuti oleh np.random.uniform dan random.randrange . random.randint adalah yang paling lambat .
► Baik np.random.randint dan np.random.uniform jauh lebih cepat (~ 8 - 12 kali lebih cepat) daripada random.randrange dan 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)
Catatan:
1.> np.random.randint menghasilkan bilangan bulat acak selama interval setengah terbuka [rendah, tinggi).
2.> np.random.uniform menghasilkan angka yang terdistribusi secara merata selama interval setengah terbuka [rendah, tinggi).
3.> random.randrange (berhenti) menghasilkan angka acak dari rentang (mulai, berhenti, langkah).
4.> random.randint (a, b) mengembalikan bilangan bulat acak N sehingga a <= N <= b.
5.> astype (int) melemparkan array numpy ke tipe data int.
6.> Saya telah memilih size = (15,). Ini akan memberi Anda array numpy dengan panjang = 15.
%timeit
kerjanya di lingkungan Anda?
Dalam hal bilangan kontinu randint
atau randrange
mungkin merupakan pilihan terbaik tetapi jika Anda memiliki beberapa nilai berbeda secara berurutan (yaitu a list
) Anda juga dapat menggunakan choice
:
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
juga berfungsi untuk satu item dari sampel yang tidak berkelanjutan:
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
Jika Anda membutuhkannya "kuat secara kriptografis" ada juga secrets.choice
di python 3.6 dan yang lebih baru:
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
random.sample
. Dengan penggantian, Anda dapat menggunakan pemahaman dengan choice
: misalnya untuk daftar yang berisi 3 nilai acak dengan penggantian:[choice(values) for _ in range(3)]
Sementara banyak posting menunjukkan bagaimana untuk mendapatkan satu integer acak, pertanyaan awal bertanya bagaimana untuk menghasilkan integer acak s (jamak):
Bagaimana saya bisa menghasilkan bilangan bulat acak antara 0 dan 9 (inklusif) dengan Python?
Untuk kejelasan, di sini kami mendemonstrasikan cara mendapatkan beberapa bilangan bulat acak.
Diberikan
>>> import random
lo = 0
hi = 10
size = 5
Kode
Banyak, Integer Acak
# 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]
Contoh Bilangan Bulat Acak
# 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]
Detail
Beberapa postingan menunjukkan cara membuat banyak bilangan bulat acak. 1 Berikut adalah beberapa opsi yang menjawab pertanyaan tersirat:
random.random
mengembalikan float acak dalam kisaran[0.0, 1.0)
random.randint
mengembalikan bilangan bulat acak N
sehinggaa <= N <= b
random.randrange
alias kerandint(a, b+1)
random.shuffle
mengacak urutanrandom.choice
mengembalikan elemen acak dari urutan non-kosongrandom.choices
mengembalikan k
pilihan dari suatu populasi (dengan penggantian, Python 3.6+)random.sample
mengembalikan k
pilihan unik dari suatu populasi (tanpa penggantian): 2Lihat juga ceramah R. Hettinger tentang Chunking dan Aliasing menggunakan contoh-contoh dari random
modul.
Berikut ini adalah perbandingan beberapa fungsi acak di Perpustakaan Standar dan 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) |
Anda juga dapat dengan cepat mengkonversi salah satu dari banyak distribusi di Numpy ke sampel bilangan bulat acak. 3
Contohnya
>>> 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 Yaitu @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, dkk. 2 @prashanth menyebutkan modul ini menunjukkan satu bilangan bulat. 3 Ditunjukkan oleh @Siddharth Satpathy
jika Anda ingin menggunakan numpy maka gunakan yang berikut ini:
import numpy as np
print(np.random.randint(0,10))
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1
Untuk mendapatkan daftar sepuluh sampel:
>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
Menghasilkan bilangan bulat acak antara 0 dan 9.
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
Keluaran:
[4 8 0 4 9 6 9 9 0 7]
Cara terbaik adalah dengan menggunakan fungsi acak impor
import random
print(random.sample(range(10), 10))
atau tanpa impor pustaka:
n={}
for i in range(10):
n[i]=i
for p in range(10):
print(n.popitem()[1])
di sini popitem menghapus dan mengembalikan nilai arbitrer dari kamus n
.
Ini lebih merupakan pendekatan matematis tetapi berhasil 100% dari waktu:
Katakanlah Anda ingin menggunakan random.random()
fungsi untuk menghasilkan angka antara a
dan b
. Untuk mencapai ini, lakukan saja hal berikut:
num = (b-a)*random.random() + a;
Tentu saja, Anda dapat menghasilkan lebih banyak angka.
Dari halaman dokumentasi untuk modul acak :
Peringatan: Generator pseudo-acak dari modul ini tidak boleh digunakan untuk tujuan keamanan. Gunakan os.urandom () atau SystemRandom jika Anda memerlukan generator nomor pseudo-acak yang aman secara kriptografis.
random.SystemRandom , yang diperkenalkan dengan Python 2.4, dianggap aman secara kriptografis . Ini masih tersedia dalam Python 3.7.1 yang saat ini sedang ditulis.
>>> 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'
Alih-alih string.digits
, range
dapat digunakan untuk beberapa jawaban lain bersama mungkin dengan pemahaman. Padu padan sesuai kebutuhan Anda.
OpenTURNS memungkinkan untuk tidak hanya mensimulasikan bilangan bulat acak tetapi juga untuk menentukan distribusi terkait dengan UserDefined
kelas yang ditentukan.
Berikut ini mensimulasikan 12 hasil distribusi.
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)
Ini mencetak:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
Tanda kurung yang ada karena x
merupakan Point
dalam 1-dimensi. Akan lebih mudah untuk menghasilkan 12 hasil dalam satu panggilan ke getSample
:
sample = distribution.getSample(12)
akan menghasilkan:
>>> 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 ]
Rincian lebih lanjut tentang topik ini ada di sini: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
Saya lebih beruntung dengan ini untuk Python 3.6
str_Key = ""
str_RandomKey = ""
for int_I in range(128):
str_Key = random.choice('0123456789')
str_RandomKey = str_RandomKey + str_Key
Cukup tambahkan karakter seperti 'ABCD' dan 'abcd' atau '^! ~ = -> <' untuk mengubah kumpulan karakter untuk menarik, ubah rentang untuk mengubah jumlah karakter yang dihasilkan.