ฉันต้องการตัวเลขสุ่ม 100,000+ ฉันพบว่า numpy เหมาะสำหรับโปรเจ็กต์ของฉันโดยพิจารณาจากประสิทธิภาพที่ดี แต่ฉันต้องการตัวเลขสุ่ม 4 ตำแหน่งตามรูปแบบด้านล่าง
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
ในกรณีข้างต้น ตัวอักษรเล็ก 26 ตัว ตัวพิมพ์ใหญ่ 26 ตัว และตัวเลข 10 หลัก เท่ากับตัวอักษรทั้งหมด 62 ตัว แล้วให้เราทำการเรียงสับเปลี่ยนและผสมกัน
ฉันต้องการตัวเลข 4 หลักจากตัวอักษรเหล่านั้น ดังนั้น
62 ^ 4 / 4! = 615680 (Combinations)
หากฉันใช้ตัวอักษรตัวเล็ก 26 ตัว + 10 หลักและผลลัพธ์คือ
(26+10) ^ 4 / 4! = 69984 (Combinations)
จากสองกรณีนี้ กรณีแรกดีที่สุด มันให้ตัวเลขสุ่มที่ดีกว่า ฉันใช้ตรรกะบางอย่างตรงนี้
from numpy.random.mtrand import RandomState
import binascii
lo = 1000000000000000
hi = 999999999999999999
In [65]: %timeit [ binascii.b2a_hex(rand.randint(lo, hi, 2).tostring())[:4] for _ in xrange(100000)]
1 loops, best of 3: 272 ms per loop
แต่การนับเลขสุ่มนั้นต่ำกว่า 100,000 เพราะใช้เพียงตัวอักษร + หลักเล็กเท่านั้น
In [66]: len(set([binascii.b2a_hex(rand.randint(lo, hi, 2).tostring())[:4] for _ in xrange(100000)]))
Out[66]: 51210
มีใครแนะนำฉันถึงวิธีการใช้สิ่งนี้ใน numpy บ้างไหม?
numpy.random.choice()
เวกเตอร์ 4 ตัวจากตัวอักษร แล้วตามด้วย''.join()
ตัวละ? - person NPE   schedule 19.09.2014