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

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

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

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


Python 随机数生成

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

  • random.random_sample()random.random()

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

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

    输出示例:

    0.5131167122678871
    0.3182844248720986
    0.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 4
    sample(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/

    你可能感兴趣的文章
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>