python 標準庫:random

在數據分析,數據清洗,數據集處理中,除了使用,咱們熟悉的 numpy.random 模塊來生成隨機數,或者隨機採樣,事實上,python 標準庫也提供了 random 模塊,若是不想,僅僅由於使用隨機數,而單獨導入 numpy 時,標準庫提供的 random 模塊,不失爲一種,輕量級替代方案,而且二者使用起來幾乎同樣。html

1. 導入模塊

random 是 python 標準庫模塊,隨 python 一塊兒安裝,無需單獨安裝,可直接導入。python

import random
複製代碼

2. 實用方法

2.1 random()

random()生成一個位於半開放區間 [0, 1) 的浮點數,幾乎全部random模塊的方法的實現,都依賴於 random()git

random.random()
複製代碼
0.9111245252327139
複製代碼

2.2 randint(a, b)

返回隨機整數 N 知足 a <= N <= b。至關於 randrange(a, b+1)。github

random.randint(0, 10)
複製代碼
8
複製代碼

2.3 randrange(start, stop[, step])

range(start, stop, step) 返回一個隨機選擇的元素。 這至關於 choice(range(start, stop, step)) ,但實際上並無構建一個 range 對象。微信

random.randrange(0, 10, 2)
複製代碼
2
複製代碼

2.4 choice(seq)

從非空序列 seq 返回一個隨機元素。 若是 seq 爲空,則引起 IndexError。dom

random.choice([0, 1, 2, 3, 4, 5])
複製代碼
2
複製代碼

2.5 choices(population, weights=None, *, cum_weights=None, k=1)

population中選擇替換,返回大小爲 k 的元素列表。 若是 population 爲空,則引起 IndexError。函數

若是指定了 weight 序列,則根據相對權重進行選擇。 或者,若是給出 cum_weights 序列,則根據累積權重(可能使用 itertools.accumulate() 計算)進行選擇。 例如,相對權重[10, 5, 30, 5]至關於累積權重[10, 15, 45, 50]。 在內部,相對權重在進行選擇以前會轉換爲累積權重,所以提供累積權重能夠節省工做量。網站

random.choices([0, 1, 2, 3, 4, 5], k=2)
複製代碼
[0, 2]
複製代碼
random.choices([0, 1, 2, 3, 4, 5], cum_weights=[10, 20, 30, 40, 50, 60], k=3)
複製代碼
[4, 4, 4]
複製代碼

2.6 shuffle(x[, random])

將序列 x 隨機打亂位置。spa

可選參數 random 是一個0參數函數,在 [0.0, 1.0) 中返回隨機浮點數;默認狀況下,這是函數 random() 。code

要改變一個不可變的序列並返回一個新的打亂列表,請使用sample(x, k=len(x))

a = [0, 1, 2, 3, 4, 5]
random.shuffle(a)
a
複製代碼
[5, 2, 3, 0, 1, 4]
複製代碼

2.7 sample(population, k)

返回從整體序列或集合中選擇的惟一元素的 k 長度列表。 用於無重複的隨機抽樣。

random.sample([1, 2, 3, 4, 5, 6], k=2)
複製代碼
[1, 3]
複製代碼

2.8 gauss(mu, sigma)

高斯分佈。 mu 是平均值,sigma 是標準差。

[random.gauss(0, 1) for i in range(10)]
複製代碼
[1.232295558291998,
 -0.23589397085653746,
 -1.4190307151921895,
 0.18999908858301912,
 0.780671045104774,
 0.041722424850158674,
 0.7392269754813698,
 1.4612049925568829,
 0.09647538110312114,
 -0.32525720572670025]
複製代碼

3. 源碼簡要

如下爲 python 官方 github 上,random 模塊的部分源碼,幫助瞭解 random 模塊的基本結構,以及本文介紹的實用方法的源碼申明。

random.py:

class Random(_random.Random):
    def seed(self, a=None, version=2):
        pass
    def randrange(self, start, stop=None, step=1, _int=int):
        pass
    def randint(self, a, b):
        pass
    def choice(self, seq):
        pass
    def shuffle(self, x, random=None):
        pass
    def sample(self, population, k):
        pass
    def choices(self, population, weights=None, *, cum_weights=None, k=1):
        pass
    def gauss(self, mu, sigma):
        pass
    ...

_inst = Random()
seed = _inst.seed
random = _inst.random
randrange = _inst.randrange
randint = _inst.randint
choice = _inst.choice
shuffle = _inst.shuffle
sample = _inst.sample
choices = _inst.choices
gauss = _inst.gauss

...
複製代碼

參考


堅持寫專欄不易,若是以爲本文對你有幫助,記得點個贊。感謝支持!


微信掃描二維碼 獲取最新技術原創

相關文章
相關標籤/搜索