博客
关于我
(数据科学学习手札03)Python与R在随机数生成上的异同
阅读量:423 次
发布时间:2019-03-06

本文共 2650 字,大约阅读时间需要 8 分钟。

随机数生成在 Python 和 R 中的应用

随机数在许多算法中都是关键步骤,例如蒙特卡洛方法、遗传算法中的轮盘赌法等。掌握不同语言中随机数生成的方法至关重要。Python 和 R 在随机数底层生成上都依靠梅森旋转(Twister)来生成高质量的随机数,但两者在语法和使用方式上存在显著差异。本文将分别介绍 Python 和 R 中常用的随机数生成方法。


Python 随机数生成

Python 的 random 模块提供了丰富的随机数生成功能,适用于各种场景。以下是其常见函数的示例:

  • random.random_sample()random.random()

    这两个函数都用于生成服从均匀分布的浮点随机数,区别在于 random_sample() 返回多个随机数,而 random.random() 仅返回单个值。例如:

    from numpy import randomfor i in range(10):    print(random.random_sample())  # 生成多个随机数

    输出示例:

    0.51311671226788710.31828442487209860.5391999374256481...
  • random.random_integers()

    该函数用于生成指定范围内的可重复整数。例如:

    random.random_integers(1, 10, 10)  # 生成10个1到10之间的整数

    输出示例:

    array([ 9, 10,  6,  4, 10, 10,  5,  3,  1,  6])
  • random.permutation()

    用于生成指定范围内所有整数的一次随机排列。例如:

    for i in range(5):    token = random.permutation(5)    print(set(token))

    输出示例:

    {0, 1, 2, 3, 4}{0, 3, 4, 2, 1}...
  • random.shuffle()

    将指定的列表随机打乱顺序。例如:

    list = [i for i in range(10)]random.shuffle(list)print(list)

    输出示例:

    [6, 8, 2, 4, 5, 3, 0, 7, 1, 9]
  • random.seed()

    设定随机数生成的种子,以实现随机数序列的重现。例如:

    random.seed(42)print(random.permutation(5))random.seed(42)print(random.permutation(5))

    输出示例:

    [1, 4, 2, 0, 3][1, 4, 2, 0, 3]
  • random.choice()

    从指定序列中随机抽取多个元素,支持有放回和无放回。例如:

    list = [i for i in range(10)]random.choice(list, 6, replace=False)  # 有放回# 输出示例:# array([9, 6, 4, 2, 7, 8])random.choice(list, 6, replace=True)  # 无放回# 输出示例:# array([1, 3, 9, 4, 0, 8])
  • random.rand()

    生成0-1之间的均匀分布浮点随机数。例如:

    random.rand(5)  # 生成5个随机数

    输出示例:

    array([0.86317047, 0.43070734, 0.85228662, 0.74797087, 0.76224563])
  • random.randn()

    生成多个服从标准正态分布的随机数。例如:

    random.randn(10)  # 生成10个正态分布随机数

    输出示例:

    array([-0.25617082, -0.85531159, -0.18286371, 1.25656827, -0.72270841,       0.13949334, 0.92318096, -1.12549131, -0.46908035, -0.28388281])
  • random.randint()

    等可能地生成指定范围内的多个随机整数。例如:

    random.randint(1, 10, 5)  # 生成5个1到10之间的整数

    输出示例:

    array([2, 9, 8, 8, 9])

  • R 随机数生成

    R 作为一门专为统计设计的语言,其随机数生成功能尤为丰富。以下是常用函数的示例:

  • rnorm()

    生成服从正态分布的随机数,可指定均值和标准差。例如:

    rnorm(5, mean=0, sd=1)  # 生成5个正态分布随机数

    输出示例:

    [1] -0.36167951 -0.50435239 -0.20245800  0.07877604  0.23662553
  • runif()

    生成均匀分布随机数,指定范围内。例如:

    runif(5, min=0, max=10)  # 生成5个0-10之间的均匀分布随机数

    输出示例:

    [1] 3.2774081 1.7341489 8.4128022 3.1511841 0.3385417
  • sample()

    以不放回的方式生成指定范围内的随机整数序列,可以选择是否有放回。例如:

    sample(1:10, 5, replace=T)  # 有放回# 输出示例:# [1] 4 9 3 4 4sample(1:10, 5, replace=F)  # 无放回# 输出示例:# [1] 3 2 6 8 1
  • set.seed()

    设定随机数生成的种子,实现随机抽样的重现。例如:

    set.seed(42)sample(1:10, 5, replace=F)  # 生成5个无放回的随机整数

    输出示例:

    [1] 10  9  3  6  4

    再次调用相同种子:

    [1] 10  9  3  6  4

  • 随机数生成的关键点

    • 种子设置:在 Python 中使用 random.seed(),而在 R 中使用 set.seed()。不同的语言默认使用不同的随机性原则(如系统时间)。
    • 随机数质量:Python 和 R 都使用梅森旋转算法生成高质量的随机数。
    • 函数分类:两种语言提供了丰富的单变量和多变量分布函数,适用于不同的应用场景。

    通过合理选择和使用这些随机数生成函数,可以在各类算法和分析中充分发挥其优势。

    转载地址:http://qacuz.baihongyu.com/

    你可能感兴趣的文章
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    network小学习
    查看>>
    Netwox网络工具使用详解
    查看>>
    Net与Flex入门
    查看>>
    net包之IPConn
    查看>>
    Net操作配置文件(Web.config|App.config)通用类
    查看>>
    Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
    查看>>
    New Relic——手机应用app开发达人的福利立即就到啦!
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS
    查看>>
    NFS Server及Client配置与挂载详解
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>
    NFS安装配置
    查看>>
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    查看>>
    NFS的常用挂载参数
    查看>>
    NFS网络文件系统
    查看>>
    nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
    查看>>
    NFV商用可行新华三vBRAS方案实践验证
    查看>>
    ng build --aot --prod生成文件报错
    查看>>