簡體   English   中英

生成隨機排列和組合(python 3.x)

[英]generating random permutations and combinations (python 3.x)

我有用於計算任何給定集合的組合或排列數量的代碼。

(math.comb(n,k)) 和 (math.perm(n,k)) 所以 perm = (math.perm(10,5)), perm == 30240 個排列

我想生成 n 和 k 的隨機排列和組合,
所以如果 n = 10,k = 5,我會得到類似 3,7,1,2,9 的東西作為燙發或梳子

我會用什么數學 function 來做這個?

編輯:
代碼應該從 10 個隨機選擇中生成一個 k 值數組,並且對於組合刪除每個值 (k),因為它是從主集 (n) 中選擇的,因此沒有 (n) 的重復。 數學的分支是組合學(如果有幫助的話)
我確信已經創建了一個 function 。
我有數百萬個 arrays 需要生成和處理。

您可以使用與math相同的預包含的 Python 的random模塊(因此您不需要使用 pip 等安裝它)。 首先定義要從中隨機選擇 k 個元素的集合,在您的示例中,它是從 1 到 10 的整數集合,所以我使用S=[i for i in range(1,11)] (記住最后一個范圍內的元素是 integer 之前的元素,您將其作為范圍的終止)。 然后在random package 中接收帶有替換使用choices命令的k個元素,對於沒有替換使用sample命令的情況。 代碼在下面。

import random
S=[i for i in range(1,11)]
A=random.choices(S,k=5)
B=random.sample(S,5)

例如,當我要求 python 分別顯示 S、A 和 B 后運行上述代碼時,我收到以下結果。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[8, 3, 2, 6, 8]
[3, 9, 6, 1, 10]

您還可以使用numpy模塊將定義 S 與范圍然后使用numpy.random.choice的兩個步驟結合起來。 但請注意,您將從 0 而不是 1 開始的 10 個整數集合中選擇 k 個。要從未定義為從 0 開始的 n 個后續整數中選擇,您應該再次定義它,與我們的第一個方法相同並給出它到這個命令而不是只有一個數字,比如 10。要在不替換的情況下進行選擇,您應該添加一個選項replace=False 請參閱以下代碼。

import numpy
C=numpy.random.choice(10,5)
D=numpy.random.choice(10,5,replace=False)
S=[i for i in range(1,11)]
A=numpy.random.choice(S,5)
B=numpy.random.choice(S,5,replace=False)

運行此程序並分別詢問 C、D、A 和 B 組后,我得到以下信息。

array([5, 5, 1, 4, 7])
array([0, 7, 4, 6, 1])
array([10,  5,  7,  1,  7])
array([6, 5, 7, 8, 1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM