2017-11-10 55 views
2

我找到的Python(及其生态系统)是完全陌生的公约和不一致的,这是另外一个例子:np.random.rand VS np.random.random

np.random.rand

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

np.random.random

返回随机漂浮在半开区间[0.0,1.0)。结果来自所述时间间隔内的“连续均匀”分布。

???那里有什么不同?

+0

有是“连续统一”分布和均匀分布之间的区别。这可能有助于为您澄清它:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.random.html –

+1

请参阅https://stackoverflow.com/a/24542083/6328256 – shash678

+0

请参阅https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)和https://en.wikipedia.org/wiki/Discrete_uniform_distribution – Barmar

回答

2

首先请注意,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)) 

(真的,仅此而已。)

+0

没错,所以实际上没有任何区别。我想知道为什么我们有两个不同名称的函数可以做同样的事情。恕我直言,他们应该清理它。 –

+0

这些有历史原因,可能与使Matlab +程序员更容易转换到Python + Numpy有关(参见Matlab的'rand'](https://www.mathworks.com/help/matlab/ref/rand.html ))。清理它可能会导致比它值得更多的麻烦,因为可能有很多现有的代码使用不同版本的功能。 –

+1

看起来像Python的社区价值观“快速入侵对我来说很简单”,而不是一致性。最好的例子是matplotlib的惯例是在创建子图时使用数字“112”来表示(1,1,2)..无论如何,谢谢你的回答。 –

相关问题