• numpy基础--random模块:随机数生成


    以下代码的前提:import numpy as np

    numpy.random模块对python内置的random进行了补充,增加了一些高效生成多种概率分布的样本值的函数。例如可以用normal来得到一个标准正态分布的样本数组。

    1 >>> samples = np.random.normal(size=(4, 4))
    2 >>> samples
    3 array([[-1.45057151,  0.80108401,  1.3671828 ,  0.34067137],
    4        [-0.351859  ,  1.24758539, -0.26833999, -1.59481081],
    5        [-0.81700215,  0.62729444, -0.34062153, -1.38731507],
    6        [-0.07054579,  0.48847421,  0.66410904,  0.75402961]])
    7 >>>

    下表是部分numpy.random函数。

    函数

    说明

    seed

    确定随机数生成器的种子

    permutation

    返回一个序列的随机排列或返回一个随机排列的范围

    shuffle

    对一个序列就地随机排序

    rand

    产生均匀分布的样本值

    randint

    从给定的上下限范围内随机选取整数

    randn

    产生正态分布(平均值为0,标准差为1)的样本值

    binomial

    产生二项分布的样本值

    normal

    产生正态(高斯)分布的样本值

    beta

    产生beta分布的样本值

    chisquare

    产生卡方分布的样本值

    gamma

    产生gamma分布的样本值

    uniform

    产生在[0, 1)中均匀分布的样本值

    1.1  范例:随机漫步

    (1)简单随机漫步

    先用np.random模块一次性产生1000个“掷硬币”的结果,分别设置为1或-1。

     1 >>> nsteps = 1000
     2 >>> draws = np.random.randint(0, 2, size=nsteps)
     3 >>> steps = np.where(draws > 0, 1, -1)
     4 >>> walk = steps.cumsum() 
     5 >>> walk.min()
     6 -1
     7 >>> walk.max() 
     8 37
     9 >>> (np.abs(walk) >= 10).argmax()  #绝对值大于10的元素个数
    10 43
    11 >>>

    (2)一次模拟多个随机漫步

    比如一次模拟5000个随机漫步过程。

     1 >>> nwalks = 5000
     2 >>> nsteps = 1000
     3 >>> draws = np.random.randint(0, 2, size=(nwalks, nsteps))  # 0或1 
     4 >>> draws
     5 array([[0, 0, 0, ..., 1, 0, 1],
     6        [0, 0, 0, ..., 1, 0, 1],
     7        [1, 0, 1, ..., 1, 0, 1],
     8        ...,
     9        [0, 1, 1, ..., 0, 0, 0],
    10        [1, 1, 0, ..., 1, 1, 0],
    11        [0, 0, 0, ..., 1, 0, 1]])
    12 >>> steps = np.where(draws > 0, 1, -1) 
    13 >>> walks = steps.cumsum(1) 
    14 >>> walks
    15 array([[ -1,  -2,  -3, ..., -38, -39, -38],
    16        [ -1,  -2,  -3, ...,  48,  47,  48],
    17        [  1,   0,   1, ..., -22, -23, -22],
    18        ...,
    19        [ -1,   0,   1, ...,  40,  39,  38],
    20        [  1,   2,   1, ..., -68, -67, -68],
    21        [ -1,  -2,  -3, ...,  20,  19,  20]], dtype=int32)
    22 >>> walks.max()
    23 125
    24 >>> walks.min() 
    25 -130
    26 >>> hits30 = (np.abs(walks) >= 30).any(1)  #轴1
    27 >>> hits30.sum() 
    28 3375
    29 >>> crossing_times = (np.abs(walks[hits30]) >= 30).argmax(1)  #轴1
    30 >>> crossing_times.mean()
    31 500.616
    32 >>>
  • 相关阅读:
    Nginx PHP页面找不到总是返回404
    Bing每日一图
    Vue3
    PHP PDO相关
    IIS 搭建FTP
    vue根据环境不同设置不同的入口文件
    Vue生成打包报告
    Vue项目在执行build命令期间中移除所有consol.log
    Nprogress 的使用
    Vue报错处理
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12249044.html
Copyright © 2020-2023  润新知