Anda sudah melakukan banyak pengamatan yang benar!
Kecuali Anda ingin melakukan seed pada kedua generator acak, mungkin akan lebih mudah dalam jangka panjang untuk memilih satu generator atau yang lain. Tetapi jika Anda memang perlu menggunakan keduanya, maka ya, Anda juga harus menyemai keduanya, karena keduanya menghasilkan nomor acak secara terpisah.
Karena numpy.random.seed()
, kesulitan utamanya adalah ini tidak aman untuk thread - yaitu, tidak aman digunakan jika Anda memiliki banyak thread eksekusi yang berbeda , karena tidak dijamin akan berfungsi jika dua thread berbeda menjalankan fungsi pada saat yang sama. Jika Anda tidak menggunakan utas, dan jika Anda dapat berharap bahwa Anda tidak perlu menulis ulang program Anda dengan cara ini di masa mendatang, numpy.random.seed()
seharusnya baik-baik saja. Jika ada alasan untuk mencurigai bahwa Anda mungkin memerlukan utas di masa mendatang, akan jauh lebih aman dalam jangka panjang untuk melakukan seperti yang disarankan, dan membuat instance lokal numpy.random.Random
kelas . Sejauh yang saya tahu, random.random.seed()
apakah thread-safe (atau setidaknya, saya belum menemukan bukti yang sebaliknya).
The numpy.random
perpustakaan berisi distribusi probabilitas beberapa tambahan yang biasa digunakan dalam penelitian ilmiah, serta beberapa fungsi kenyamanan untuk menghasilkan array dari data acak. The random.random
Perpustakaan sedikit lebih ringan, dan harus baik-baik jika Anda tidak melakukan penelitian ilmiah atau jenis lain dari pekerjaan dalam statistik.
Jika tidak, keduanya menggunakan urutan twister Mersenne untuk menghasilkan nomor acak mereka, dan keduanya sepenuhnya deterministik - yaitu, jika Anda mengetahui beberapa informasi penting, Anda dapat memprediksi dengan pasti pasti nomor apa yang akan datang berikutnya . Untuk alasan ini, baik numpy.random maupun random.random tidak cocok untuk penggunaan kriptografi yang serius . Tetapi karena urutannya sangat panjang, keduanya baik-baik saja untuk menghasilkan angka acak jika Anda tidak khawatir tentang orang yang mencoba merekayasa balik data Anda. Ini juga merupakan alasan perlunya menyemai nilai acak - jika Anda memulai di tempat yang sama setiap kali, Anda akan selalu mendapatkan urutan angka acak yang sama!
Sebagai catatan tambahan, jika Anda memang membutuhkan keacakan tingkat kriptografi, Anda harus menggunakan modul rahasia , atau sesuatu seperti Crypto.Random jika Anda menggunakan versi Python sebelum Python 3.6.
random.random
sendirian. Anda biasanya tidak membutuhkan ini.Dari Python untuk Analisis Data , modul
numpy.random
melengkapi Pythonrandom
dengan fungsi untuk menghasilkan seluruh array nilai sampel secara efisien dari berbagai jenis distribusi probabilitas.Sebaliknya,
random
modul bawaan Python hanya mengambil sampel satu nilai pada satu waktu, sementaranumpy.random
dapat menghasilkan sampel yang sangat besar lebih cepat. Menggunakan fungsi ajaib IPython,%timeit
seseorang dapat melihat modul mana yang bekerja lebih cepat:sumber
np.random.randint(2)
denganrandom.randrange(2)
dan NumPy lebih lambat . NumPy: 1,25 us dan Random: 891 ns. Dan juga hubungan yang sama untuknp.random.rand()
danrandom.random()
.Sumber seed dan profil distribusi yang digunakan akan memengaruhi output - jika Anda mencari keacakan cryptgraphic, seeding dari os.urandom () akan mendapatkan byte acak yang hampir nyata dari obrolan perangkat (mis. Ethernet atau disk) (mis. / dev / random di BSD)
ini akan menghindari Anda memberikan benih dan dengan demikian menghasilkan angka acak determinisit. Namun panggilan acak kemudian memungkinkan Anda untuk menyesuaikan nomor ke distribusi (apa yang saya sebut acak ilmiah ness - akhirnya yang Anda inginkan adalah distribusi kurva lonceng dari nomor acak, numpy adalah yang terbaik dalam menyampaikan ini.
JADI ya, tetap dengan satu generator, tetapi putuskan acak apa yang Anda inginkan - acak, tetapi pasti dari kurva distrubtuion, atau seacak mungkin tanpa perangkat kuantum.
sumber