第13节,numpy与随机数

numpy 太强大了,它的随机数模块也比python原生的random模块要好用的多,提供的功能更加丰富,更加强大。

1. numpy.random.rand

rand 函数产生[0, 1)范围内的随机数,能产生多少个,取决于传入的参数,rand的定义如下

def rand(*dn):
    """
    rand(d0, d1, ..., dn)
    """
    pass

dn是可变参数,可以传入多个,表示生成数组的形状,如果不传入任何参数则返回一个float类型的数值

import numpy as np

value = np.random.rand()
print(value, type(value))

现在实验一下传入参数的情况

import numpy as np

array_1 = np.random.rand(6)   # 一维数组随机数
print(array_1)

array_2 = np.random.rand(3, 2)  # 二维数组随机数
print(array_2)

程序输出

[0.94762455 0.6558327  0.47573493 0.11224826 0.82755192 0.38966902]
[[0.64692518 0.89247648]
 [0.39437826 0.07003423]
 [0.47875777 0.45057145]]

2.numpy.random.randn

randn可以从标准正态分布中返回一个或多个样本值,这些随机数,服从均值为0,方差为1的分布,除了随机值的范围不同,其使用方法与rand基本一致

import numpy as np

value = np.random.randn()
print(value)        # 生成一个随机数


array_1 = np.random.randn(90)
print(array_1.mean())       # 均值
print(array_1.var())        # 方差


array_2 = np.random.randn(10, 9)
print(array_2.mean())       # 均值
print(array_2.var())        # 方差

输出结果

-0.7161199885791742
-0.2421447905554953
0.8668068040071367
-0.027454863417423495
0.706106831464308

从输出结果来看,均值趋近于0,方差趋近于1,多试验几次,效果会更明显。如果想生成指定均值和方差的正态分布,则可以依照下面的公式

sigma * np.random.randn(...) + mu

sigma是标准差,mu是均值,sigma的平方就是方差,现在我想要生成一组随机数,均值是2,方法是9,就可以这样来做

import numpy as np

array = 3*np.random.randn(100) + 2
print(array.mean())     # 均值
print(array.var())      # 方差

3. numpy.random.random

random的作用也是生成一个[0, 1)范围内的随机数,下面是这个函数的使用示例

import numpy as np

value = np.random.random()
print(value)        # 产生一个随机数


array_1 = np.random.random(8)       # 一维数组
print(array_1)

array_2 = np.random.random((3, 4))  # 二维数组
print(array_2)

使用方法几乎与rand相同,唯一的区别是想要生成二维或更高维度的数组时,rand函数需要传入多个参数,而random只需要传入一个元组即可,但仅仅是参数的区别么?目前看是如此的,如果你有别的见解,欢迎与我交流。

4. numpy.random.randint

生成指定范围内的随机整数,函数定义如下

def randint(low, high=None, size=None, dtype=None):
    pass
  1. size 决定生成随机数的个数,不设置则生成一个随机值
  2. dtype决定随机数的类型
  3. low 和 high 决定随机数的范围,左闭右开
  4. 如果high不设置,则随机数的范围是[0, low)

我现在要生成一个在[0, 4)范围内的整数

import numpy as np

value = np.random.randint(4)
print(value)

接下来生成8个范围在[3, 9)之间的随机整数

import numpy as np

value = np.random.randint(3, 9, size=8)
print(value)  # [4 6 4 8 8 8 3 3]

5. numpy.random.uniform

uniform 从指定范围内产生均匀分布的随机浮点数,函数定义如下

def uniform(low=0.0, high=1.0, size=None):
    pass
  1. low 表示下限
  2. high 表示上限
  3. size 表示形状
  4. [low, high),依然是左闭右开

举例说明

import numpy as np

value = np.random.uniform(1.4, 2.8)     # 生成一个在[1.4, 2.8) 范围内的随机数
print(value)

array_1 = np.random.uniform(0.5, 3.5, 9)        # 生成9个在[0.5, 3.5) 之间的随机数
print(array_1)
print(array_1.mean())       # 一定接近于2

array_2 = np.random.uniform(0.5, 3.5, (3, 4))   # 生成一个维度是(3, 4) 的数组,元素在[0.5, 3.5)范围内随机
print(array_2)

array_1 的元素随机值在[0.5, 3.5)之间,uniform产生的随机值是均匀分布的,因此array_1的平均值一定接近于2

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案