采样(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