在numpy中生成字母数字随机数

时间:2014-09-18 20:10:36

标签: python numpy random

我想要随机数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中实现这个?

4 个答案:

答案 0 :(得分:8)

正如NPE所指出的,你可以使用numpy.random.choice。 这段代码能达到你想要的吗?

import numpy as np

LENGTH = 4
NO_CODES = 100000

alphabet = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
np_alphabet = np.array(alphabet, dtype="|S1")
np_codes = np.random.choice(np_alphabet, [NO_CODES, LENGTH])
codes = ["".join(np_codes[i]) for i in range(len(np_codes))]

print(codes)

在我2岁但又不错的计算机上使用NO_CODES = 1000000执行需要几秒钟。

答案 1 :(得分:1)

使用numpy视图可以更快地完成操作。

A, Z = np.array(["A","Z"]).view("int32") 

NO_CODES = 100
LEN = 20

np.random.randint(low=A,high=Z,size=NO_CODES*LEN,dtype="int32").view(f"U{LEN}")

答案 2 :(得分:0)

使用以下代码可以使接受的答案更快一点:

import numpy as np

length  = 4
n_codes = 100000
alpha_num = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

np_codes = np.random.choice(alpha_num, size=[n_codes, length])
codes = [code.tostring() for code in np_codes]

计算机上的原始运行时:10 loops, best of 3: 204 ms per loop

新的运行时:10 loops, best of 3: 27.6 ms per loop

答案 3 :(得分:0)

其他两个答案都不适合我,但是我能够使用它们来创建以下解决方案:

import numpy as np

length  = 4
n_codes = 100000
alpha_num = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')

np_codes = np.random.choice(alpha_num, size=[n_codes, length])
codes = [''.join(code) for code in np_codes]
相关问题