choice() 方法返回一個列表,元組或字符串的隨機項。
以下是 choice() 方法的語法:
import random
random.choice( seq )
注意:choice()是不能直接訪問的,需要導入 random 模塊,然後通過 random 靜態對象調用該方法。
seq -- 可以是一個列表,元組或字符串。
返回隨機項。
以下展示了使用 choice() 方法的實例:
#!/usr/bin/python
import random
print "choice([1, 2, 3, 5, 9]) : ", random.choice([1, 2, 3, 5, 9])
print "choice('A String') : ", random.choice('A String')
以上實例運行後輸出結果為:
choice([1, 2, 3, 5, 9]) : 2
choice('A String') : n
random.choice()函數:從給定的1維數組中隨機采樣的函數。
numpy.random.choice(a, size=None, replace=True, p=None)
a
: 如果是一維數組,就表示從這個一維數組中隨機采樣;如果是int型,就表示從0到a-1這個序列中隨機采樣。
size
:采樣結果的數量,默認為1.可以是整數,表示要采樣的數量;也可以為tuple,如(m, n, k),則要采樣的數量為m *n *k, size為(m, n, k)。
replace
: boolean型,采樣的樣本是否要更換?這個地方我不太理解,測了一下發現replace指定為True時,采樣的元素會有重復;當replace指定為False時,采樣不會重復。
p
: 一個一維數組,制定了a中每個元素采樣的概率,若為默認的None,則a中每個元素被采樣的概率相同。
注意:
replace
代表的意思是抽樣之後還放不放回去,如果是False的話,那麼出來的三個數都不一樣,如果是True的話,有可能會出現重復的,因為前面的抽的放回去了。p
中值的個數必須和a中數據的個數一致。
返回值:samples : single item or ndarray(The generated random samples)
ValueError:
If a is an int and less than zero, if a or p are not 1-dimensional, if a is an array-like of size 0, if p is not a vector of probabilities, if a and p have different lengths, or if replace=False and the sample size is greater than the population size
從大小為3的np.arange(5)生成一個均勻(p=None)的隨機樣本:
>>> np.random.choice(5, 3)
array([0, 3, 4])
>>> #This is equivalent to np.random.randint(0,5,3)
從大小為3的np.arange(5)生成一個非均勻(p有值)的隨機樣本:
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0])
從大小為3的np.arange(5)生成一個均勻的隨機樣本,沒有替換(重復):
>>> np.random.choice(5, 3, replace=False)
array([3,1,0])
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
從大小為3的np.arange(5)生成一個非均勻的隨機樣本,沒有替換(重復):
>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0])
上面例子中第一個參數都可以用一個任意的數組來代替,而不僅僅是整數。例如:
>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'],
dtype='|S11')
實際使用中,首先創建一個mask變量,然後通過mask來對需要采樣的數據進行采樣:
mask = np.random.choice(split_size, batch_size)
captions = data['%s_captions' % split][mask]
image_idxs = data['%s_image_idxs' % split][mask]
python中choice對比(在numpy和random中均出現過)外加sample()函數對比