np.random.rand vs np.random.random

时间:2017-11-10 22:05:59

标签: python numpy

我发现Python(及其生态系统)充满了奇怪的约定和不一致,这是另一个例子:

np.random.rand

  

创建给定形状的数组,并使用来自[0,1]上的均匀分布的随机样本填充它。

np.random.random

  

在半开区间[0.0,1.0]中返回随机浮点数。结果来自规定区间内的“连续均匀”分布。

???究竟有什么区别?

2 个答案:

答案 0 :(得分:15)

首先请注意,numpy.random.random实际上是numpy.random.random_sample的别名。我将在下面使用后者。 (有关更多别名,请参阅this question and answer。)

两个函数都从{0,1}上的uniform distribution生成样本。唯一的区别在于如何处理参数。对于numpy.random.rand,输出数组的每个维度的长度是一个单独的参数。对于numpy.random.random_sample,shape参数是一个单元组。

例如,要创建具有形状(3,5)的样本数组,可以编写

sample = np.random.rand(3, 5)

sample = np.random.random_sample((3, 5))

(真的,就是这样。)

答案 1 :(得分:0)

我也有同样的问题。这表明输出是相同的。不同之处在于输入格式(维度(元组或列表)的单个 arg 与维度 args 序列):

# np.random.random([2,3]) vs np.random.rand(2,3)

print()
np.random.seed(1)
print('  .. np.random.random([2,3]):\n', np.random.random([2,3]))
print()
np.random.seed(1)
print('  .. np.random.rand(2,3):\n', np.random.rand(2,3))

# output

 .. np.random.random([2,3]):
 [[4.17022005e-01 7.20324493e-01 1.14374817e-04]
 [3.02332573e-01 1.46755891e-01 9.23385948e-02]]

  .. np.random.rand(2,3):
 [[4.17022005e-01 7.20324493e-01 1.14374817e-04]
 [3.02332573e-01 1.46755891e-01 9.23385948e-02]]