我发现Python (及其生态系统)充满了奇怪的约定和矛盾,这是另一个例子:
np.random.rand
创建一个给定形状的数组,并在[0,1]上使用均匀分布的随机样本填充它。
np.random.random
在半开区间[0.0,1.0]中返回随机浮动。结果来自于在所述区间上的“连续均匀”分布。
???那到底有什么区别?
发布于 2017-11-10 22:37:12
首先请注意,numpy.random.random实际上是numpy.random.random_sample的别名。我将在下面使用后者。(更多别名请参见这个问题和答案。)
这两个函数都从均匀分布生成示例。唯一的区别是如何处理参数。对于numpy.random.rand,输出数组的每个维度的长度是一个单独的参数。对于numpy.random.random_sample,shape参数是单个元组。
例如,要创建一个具有形状(3,5)的示例数组,可以编写
sample = np.random.rand(3, 5)或
sample = np.random.random_sample((3, 5))(真的,就是这样。)
更新
从1.17版本开始,NumPy就有了一个新的随机API。从[0,1)的均匀分布中生成样本的推荐方法是:
>>> rng = np.random.default_rng() # Create a default Generator.
>>> rng.random(size=10) # Generate 10 samples.
array([0.00416913, 0.31533329, 0.19057857, 0.48732511, 0.40638395,
0.32165646, 0.02597142, 0.19788567, 0.08142055, 0.15755424])新的Generator类没有rand()或random_sample()方法。有一个uniform()方法允许您指定发行版的下界和上界。例如。
>>> rng.uniform(1, 2, size=10)
array([1.75573298, 1.79862591, 1.53700962, 1.29183769, 1.16439681,
1.64413869, 1.7675135 , 1.02121057, 1.37345967, 1.73589452])numpy.random名称空间中的旧函数将继续工作,但它们被认为是“冻结”的,没有正在进行的开发。如果您正在编写新代码,并且不需要支持numpy的前1.17版本,建议您使用新的随机API。
发布于 2021-02-17 13:07:35
我也有同样的问题。这表明输出是相同的。不同之处在于输入格式(维度的单个arg (元组或列表)与维度arg序列):
# 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]]https://stackoverflow.com/questions/47231852
复制相似问题