一泰偿、python標(biāo)準(zhǔn)庫(kù)中的random模塊常用的方法
random.random
random.random()用于生成一個(gè)0到1的隨機(jī)符點(diǎn)數(shù)(float): 0 <= n < 1.0(注意是左閉右開(kāi))
[注:一般認(rèn)為python中的float是np.float64]
random.uniform
random.uniform(a, b)熄守,用于生成一個(gè)指定范圍內(nèi)的隨機(jī)符點(diǎn)數(shù),兩個(gè)參數(shù)其中一個(gè)是上限,一個(gè)是下限裕照。如果a > b攒发,則生成的隨機(jī)數(shù)n: a <= n <= b。如果 a <b晋南, 則 b <= n <= a 晨继,且a,b可以是float類(lèi)型搬俊,為左閉右閉區(qū)間
代碼如下:
print random.uniform(10, 20)
print random.uniform(20, 10)
# 18.7356606526
# 12.5798298022
random.randint
random.randint(a, b)紊扬,用于生成一個(gè)指定范圍內(nèi)的整數(shù)。其中參數(shù)a是下限唉擂,參數(shù)b是上限餐屎,生成的隨機(jī)數(shù)n: a <= n <= b (左閉右閉)
代碼如下:
print random.randint(12, 20)? # 生成的隨機(jī)數(shù) n: 12 <= n <= 20
print random.randint(20, 20)? # 結(jié)果永遠(yuǎn)是20? ?
# print random.randint(20, 10)? # 該語(yǔ)句是錯(cuò)誤的。下限必須小于上限
random.randrange
random.randrange([start], stop[, step])玩祟,從指定范圍內(nèi)腹缩,按指定基數(shù)遞增的集合中 獲取一個(gè)隨機(jī)數(shù)。如:random.randrange(10, 100, 2)空扎,結(jié)果相當(dāng)于從[10, 12, 14, 16, ... 96, 98]序列中獲取一個(gè)隨機(jī)數(shù)藏鹊。random.randrange(10, 100, 2)在結(jié)果上與 random.choice(range(10, 100, 2) )等效
random.choice
random.choice從序列中獲取一個(gè)隨機(jī)元素。其函數(shù)原型為:random.choice(sequence)转锈。參數(shù)sequence表示一個(gè)有序類(lèi)型盘寡。這里要說(shuō)明 一下:sequence在python不是一種特定的類(lèi)型,而是泛指一系列的類(lèi)型撮慨。list, tuple, 字符串都屬于sequence竿痰。有關(guān)sequence可以查看python手冊(cè)數(shù)據(jù)模型這一章。下面是使用choice的一些例子:
代碼如下:
print(random.choice("學(xué)習(xí)Python"))
print(random.choice(["JGood", "is", "a", "handsome", "boy"]))
print(random.choice(("Tuple", "List", "Dict")))
random.shuffle
random.shuffle(x[, random])砌溺,用于將一個(gè)列表中的元素打亂(類(lèi)似于洗牌)影涉,要注意的是,shuffle是改變?cè)行蛄泄娣ィ宰址驮M等不可變的序列就不能作為shuffle的參數(shù)蟹倾。其中參數(shù)random是可選參數(shù),是一個(gè)沒(méi)有參數(shù)的猖闪、返回 0-1(左閉右開(kāi))之間的隨機(jī)數(shù)的函數(shù)鲜棠,默認(rèn)值為None(實(shí)際會(huì)使用random.random()來(lái)得到0-1之間的隨機(jī)數(shù))
代碼如下:
p = ["Python", "is", "powerful", "simple", "and so on..."]
random.shuffle(p)
print p
# ['powerful', 'simple', 'is', 'Python', 'and so on...']
random.sample
random.sample(sequence, k),從指定序列中隨機(jī)獲取指定長(zhǎng)度的片斷(類(lèi)似于樣本取樣)萧朝。sample函數(shù)不會(huì)修改原有序列
代碼如下:
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slice = random.sample(list, 5)? # 從list中隨機(jī)獲取5個(gè)元素岔留,作為一個(gè)片斷返回
print slice
print list? # 原有序列并沒(méi)有改變
二夏哭、numpy中的random模塊的常用方法
numpy.random.shuffle
與python標(biāo)準(zhǔn)庫(kù)中的shuffle用途一樣检柬,只是numpy中的shuffle只有一個(gè)參數(shù),就是需要洗牌的序列;要注意的是numpy.ndarray類(lèi)型的序列要用numpy中的shuffle何址,用標(biāo)準(zhǔn)庫(kù)中的shuffle會(huì)出現(xiàn)不可預(yù)知的錯(cuò)誤(numpy的shuffle應(yīng)用于多維度的list是沒(méi)問(wèn)題的)里逆。
代碼如下:
>>> L = [1,2,3,4,5,6]
>>> numpy.random.shuffle(L)
>>> L
[6, 1, 5, 3, 4, 2]
>>> a = numpy.array([[1,2],[3,4],[5,6]])
>>> numpy.random.shuffle(a)
>>> a
array([[3, 4],
? ? ? ? ? [5, 6],
? ? ? ? ? [1, 2]])
>>> import random
>>> random.shuffle(a)
>>> a
array([[3, 4],
? ? ? ? ? [3, 4],
? ? ? ? ? [1, 2]])
numpy.random.permutation
除了shuffle,在numpy中還提供了另外一個(gè)用于洗牌的方法permutation用爪,主要區(qū)別是他會(huì)copy一份要洗牌的序列原押,讓后返回一個(gè)洗牌之后的序列,并不改變?cè)行蛄匈搜硗庵钕危绻麉?shù)是整數(shù),等同于numpy.random.permutation(numpy.arange(x))
代碼如下:
>>> numpy.random.permutation(6)
array([4, 3, 5, 2, 1, 0])
>>> numpy.random.permutation(numpy.arange(6))
array([0, 3, 2, 1, 5, 4])
numpy.random.choice
功能類(lèi)似于樣本取樣:
choice(a, size=None, replace=True, p=None)
參數(shù)a是樣本颇玷,其他參數(shù)不提供的話會(huì)單獨(dú)返回一個(gè)樣本笨农,如果a是一個(gè)整數(shù),會(huì)取numpy.arange(a)來(lái)作為樣本帖渠,參數(shù)size是返回樣本的shape谒亦,參數(shù)replace默認(rèn)為T(mén)rue,表示可以得到重復(fù)樣本空郊,設(shè)置成False表示不可以重復(fù)取同一個(gè)樣本份招,這時(shí)size設(shè)置的取樣總數(shù)不能超過(guò)樣本總數(shù),參數(shù)p是樣本集中每個(gè)樣本被取出的概率狞甚,所有概率之和要等于1锁摔,p默認(rèn)為None。
代碼如下:
numpy.random.choice(numpy.arange(6))
5
>>> numpy.random.choice(6)
2
>>> numpy.random.choice(6, 5)
array([5, 5, 3, 0, 4])
>>> numpy.random.choice(6, 5, replace=False)
array([1, 2, 0, 5, 3])
>>> numpy.random.choice(6, 5, p=[0.01,0.01,0.01,0.01,0.01,0.95])
array([5, 5, 5, 5, 5])
>>> numpy.random.choice(['a','b','c','d','e','f'], 5, p=[0.01,0.01,0.01,0.51,0.01,0.45])
array(['f', 'f', 'd', 'd', 'd'], dtype='<U1')