2017-11-10 46 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)..無論如何,謝謝你的回答。 –

相關問題