python之常见random用法小结

采样(random)函数

这里总结的是一些常用的包,具体的细节可以查看参考中的内容。

numpy 包

1 np.random.random(size = None)

说明:

np.random.random((3,2))生成3行2列的浮点数(float),生成的数值是从左闭右开区间 [ 0.0 , 1.0 ) [0.0,1.0) [0.0,1.0) 随机采样。

np.random.random((3,2))
----------------------------------------------------
out:
array([[0.84779071, 0.76728095],
       [0.63633714, 0.58783879],
       [0.14570739, 0.39521228]])

2 np.random.rand(d0, d1, …, dn)

说明:

功能与上述 np.random.random()完全一致,唯一的区别就是这里接受分开的参数,而 np.random.random()接收一个元组,当然也从左闭右开区间 [ 0.0 , 1.0 ) [0.0,1.0) [0.0,1.0) 间随机采样。

示例:
np.random.rand(3,2)
----------------------------------------------------
out:
array([[0.37010063, 0.10150011],
       [0.11599331, 0.60604736],
       [0.56530113, 0.41665416]])

3 np.random.randn(d0, d1, …, dn)

说明:

生成给定形状的正态分布随机样本数。

示例:
np.random.randn(3,2,2)
----------------------------------------------------
out:
array([[[ 0.12428616,  0.47207223],
        [ 0.79928503, -0.32300452]],

       [[-1.98587926,  0.0453755 ],
        [-0.57284589, -0.38869377]],

       [[-1.74911976, -1.67021527],
        [-0.29992173, -0.87777794]]])

4 np.random.randint(low, high=None, size=None, dtype=int)

说明:

生成指定范围内随机整数,或随机整数数组。当 high = None 时,整数的取值范围是 [ 0 , l o w ) [0,low) [0,low) ,否则取值范围为 [ l o w , h i g h ) [low,high) [low,high)。np.random.randint(10,(2,8))生成的是二行八列的从0到9的整数。而np.random.randint(10,20,(2,8))生成的是二行八列的从10到19的整数。

示例:
np.random.randint(10,size=(2,8))
----------------------------------------------------
out:
array([[7, 2, 9, 9, 3, 0, 2, 7],
       [2, 7, 7, 3, 2, 8, 0, 6]])

np.random.randint(10,20,size=(2,8))
----------------------------------------------------
out:
array([[10, 19, 10, 18, 18, 19, 10, 15],
       [11, 12, 14, 12, 17, 19, 11, 13]])

5 np.random.uniform(low=0.0,high=1.0,size = None)

说明:

从均匀分布中随机采样,区间为 [ l o w , h i g h ) [low,high) [low,high)。np.random.uniform(5,10,(3,2))在3行两列的数组上从 [ 5 , 10 ) [5,10) [5,10)区间均匀采样。

示例:
np.random.uniform(5,10,(3,2))
----------------------------------------------------
out:
array([[6.49337675, 8.76236736],
       [5.09331864, 7.61868718],
       [9.32217924, 6.9442142 ]])

np.random.rand() ; np.random.random(); np.random.randint() 都是均匀采样,不过 np.random.randint()只取整数。

6 np.random.exponential(scale = 1.0, size = None)

说明:

这里使用的scale是平时中我们使用的指数分布的参数 β = 1 λ \beta=\frac{1}{\lambda} β=λ1,指数分布的概率密度函数为 f ( x , β ) = 1 β e x p ( − 1 β ) f(x,\beta) = \frac{1}{\beta}exp(-\frac{1}{\beta}) f(x,β)=β1exp(β1)
np.random.exponential(0.5,size = (2,2))从指数分布中采样二行二列的数组。

示例:
np.random.exponential(0.5,(2,2))
----------------------------------------------------
out:
array([[0.23313524, 1.67454171],
       [0.04244451, 0.02168919]])

7 np.random.choice(a,size = None,replace = True, p =True)

说明:

从给定的数组 np.arange(a)中随机采样,如果replace为True,则可以重复取数值,反之一个数只能取一次。不给定p值时,按照均匀分布取值。

示例:
np.random.choice(4,size = (2,2),replace=True)
----------------------------------------------------
out:
array([[3, 2],
       [1, 3]])

np.random.choice(4,size = (2,2),replace=True,p=[0.97,0.01,0.01,0.01])
----------------------------------------------------
out:
array([[0, 0],
       [0, 0]])
       
np.random.choice(4,size = (2,2),replace=False)
----------------------------------------------------
out:
array([[0, 3],
       [1, 2]])

8 np.random.shuffle(x)

说明:

将给定数列或数组打乱顺序重新排列,如果是数组,则只沿多维数组的第一个轴对数组进行重新排序。

示例:
a = np.arange(10)
np.random.shuffle(a)
a
----------------------------------------------------
out:
array([1, 5, 8, 7, 3, 9, 6, 0, 2, 4])

b = np.arange(12).reshape(4,3)
b
----------------------------------------------------
out:
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

np.random.shuffle(b)
b
----------------------------------------------------
out:
array([[ 9, 10, 11],
       [ 6,  7,  8],
       [ 3,  4,  5],
       [ 0,  1,  2]])

9 np.random.seed(seed = None)

说明:

设置随机数种子,使生成的随机数相同。

示例:
np.random.seed(123)
np.random.rand(2)
----------------------------------------------------
out:
array([0.69646919, 0.28613933])

np.random.seed(123)
np.random.rand(2)
----------------------------------------------------
out:
array([0.69646919, 0.28613933])

torch 包

1 torch.rand(size)

torch.rand( * size, * , out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False)

说明:

会生成形状为size定义的 [ 0 , 1 ) [0,1) [0,1)区间上的均匀分布采样得到的张量 tensor。

参数

generator (torch.Generator, optional) – 用于采样的伪随机数生成器。
dtype (torch.dtype, optional) – 返回张量的所需数据类型,比如torch.float32 / torch.float64。
layout (torch.layout, optional) – 返回张量的期望布局。
device (torch.device, optional) – 返回张量的所需设备。
requires_grad (bool, optional) – 如果 autograd 应该在返回的张量上记录操作。
pin_memory (bool, optional) – 如果设置,返回的张量将被分配到固定内存中。

示例
torch.rand([3,2])
----------------------------------------------------
out:
tensor([[0.1567, 0.7043],
        [0.9464, 0.7781],
        [0.6728, 0.6394]])

2 torch.randn(size)

**torch.randn(size, , out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False)

说明:

与1类似,区别就是torch.randn()是从正态分布采样。

示例
torch.randnn([3,2])
----------------------------------------------------
out:
tensor([[ 0.1967,  0.7321],
        [ 0.6779,  0.3004],
        [-0.2562, -0.0790]])

3 torch.randint(low,high,size)

torch.randint(low=0, high, size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

说明:

生成指定范围内的均匀分布,且为整数。区间为 [ l o w , h i g h ) [low,high) [low,high)

示例
torch.randint(4,10,[2,2])
----------------------------------------------------
out:
tensor([[6, 5],
        [4, 6]])
4 torch.randperm(n)

*torch.randperm(n, , generator=None, out=None, dtype=torch.int64, layout=torch.strided, device=None, requires_grad=False, pin_memory=False)

说明:

生成从 0 到 n - 1 的整数的随机排列。

示例
torch.randperm(10)
----------------------------------------------------
out:
tensor([5, 8, 1, 9, 7, 0, 3, 2, 6, 4])

参考

1.https://numpy.org/doc/stable/index.html
2.https://pytorch.org/docs/stable/index.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值