我们在使用Numpy或Pytorch时有时候需要使用随机数来初始化一个矩阵,randn和rand就属于其中比较常见的两个函数。二者的使用方法相似,在numpy中函数形式为:

numpy.random.randn(d0, d1, d2, ..., dn)
numpy.random.rand(d0, d1, d2, ..., dn)

在Pytorch中的函数形式为:

torch.randn(d0, d1, d2, ..., dn)
torch.rand(d0, d1, d2, ..., dn)

在一些教程中经常会看到作者在写代码时混用它们二者,实际上它们还是有一些区别的。具体来讲,randn是从标准正态分布中返回一个或多个样本值。正态分布,也即这些随机数的期望为0,方差为1;rand则会产生[0, 1)之间的随机数。 关于记忆方法,我们可以把randn中的n看成是正态分布(Normal distribution)中“Normal”的缩写。

Numpy - randn
Numpy - rand
Pytorch - randn
Pytorch - rand

多说一句,在Tensorflow中也有类似功能的函数,根据其命名可以很容易推断出其功能。用于产生正态分布的函数为:

tf.random_normal()

常用参数为 (shape,stddev,mean,dtype);

用于产生[0,1)之间随机数的函数为:

tf.random_uniform()

默认产生0,1之间的随机数,不过也可以通过maxval指定上界,通过minval指定下界。