Мне нужны случайные числа 100000+, я обнаружил, что 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
Но подсчет случайных чисел ниже 100000, потому что он принимает только маленькие буквы + цифры
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