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

 阳光碎了围脖_182 发布于 2022-12-20 17:11

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

1 个回答
  • 正如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)
    

    NO_CODES = 1000000在我2岁但不坏的计算机上执行它需要几秒钟.

    2022-12-20 17:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有