numpy.random.Generator.choice#

方法

random.Generator.choice(a, size=None, replace=True, p=None, axis=0, shuffle=True)#

從給定的陣列產生隨機樣本

參數:
a{array_like, int}

如果是一個 ndarray,則從其元素中產生隨機樣本。如果是一個 int,則從 np.arange(a) 中產生隨機樣本。

size{int, tuple[int]}, optional

輸出形狀。如果給定的形狀是,例如 (m, n, k),則從 1 維的 a 中抽取 m * n * k 個樣本。如果 a 有多個維度,則 size 形狀將被插入到 axis 維度中,因此輸出 ndim 將為 a.ndim - 1 + len(size)。預設值為 None,在這種情況下,將傳回單一值。

replacebool, optional

樣本是否為有放回或無放回取樣。預設值為 True,表示值 a 可以被多次選取。

p1-D array_like, optional

與 a 中每個條目相關聯的機率。如果未給定,則樣本假設在 a 中所有條目上呈均勻分佈。

axisint, optional

執行選取的軸。預設值 0 依列選取。

shufflebool, optional

當進行無放回取樣時,樣本是否被打亂。預設值為 True,False 提供加速。

傳回:
samplessingle item 或 ndarray

產生的隨機樣本

引發:
ValueError

如果 a 是一個小於零的 int,如果 p 不是 1 維的,如果 a 是一個大小為 0 的類陣列,如果 p 不是機率向量,如果 a 和 p 的長度不同,或者如果 replace=False 且樣本大小大於母體大小。

另請參閱

integers, shuffle, permutation

註解

透過 p 設定使用者指定的機率會使用比預設值更通用但效率較低的取樣器。即使 p 的每個元素都是 1 / len(a),通用取樣器也會產生與最佳化取樣器不同的樣本。

p 必須總和為 1。為了確保這一點,您可能希望使用 p = p / np.sum(p, dtype=float) 進行正規化。

當將 a 作為整數型別傳遞且未指定 size 時,傳回型別是原生 Python int。

範例

從 np.arange(5) 中產生大小為 3 的均勻隨機樣本

>>> rng = np.random.default_rng()
>>> rng.choice(5, 3)
array([0, 3, 4]) # random
>>> #This is equivalent to rng.integers(0,5,3)

從 np.arange(5) 中產生大小為 3 的非均勻隨機樣本

>>> rng.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])
array([3, 3, 0]) # random

從 np.arange(5) 中產生大小為 3 的無放回均勻隨機樣本

>>> rng.choice(5, 3, replace=False)
array([3,1,0]) # random
>>> #This is equivalent to rng.permutation(np.arange(5))[:3]

從 2 維陣列沿著第一個軸(預設值)產生無放回均勻隨機樣本

>>> rng.choice([[0, 1, 2], [3, 4, 5], [6, 7, 8]], 2, replace=False)
array([[3, 4, 5], # random
       [0, 1, 2]])

從 np.arange(5) 中產生大小為 3 的無放回非均勻隨機樣本

>>> rng.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0]) # random

以上任何範例都可以使用任意類陣列(而不僅僅是整數)重複執行。例如

>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> rng.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], # random
      dtype='<U11')