2016-10-11 92 views
3

我有一個列表列表,其中每個列表都與分數/權重相關聯。我想通過從第一個列表中隨機選擇一個列表來創建一個新列表,這樣分數較高的列表就會更頻繁地出現。下面的行工作正常,當​​只是一個正常的名單。但我想要列出一個列表。隨機選擇Python列表中的列表,取決於權重

population = [['a','b'],['b','a'],['c','b']] 
list_of_prob = [0.2, 0.2, 0.6] 

population = np.random.choice(population, 10, replace=True, p=list_of_prob) 

這會給輸出ValueError: a must be 1-dimensional

+0

@Chicony你應該在問題中提到,這是沒有必要的應該是'numpy' –

回答

7

不是傳遞的實際名單,通過與索引到列表清單。

np.random.choice已經允許這一點,如果你傳遞一個int n那麼它的工作原理,如果你通過np.arange(n)

所以

choice_indices = np.random.choice(len(population), 10, replace=True, p=list_of_prob) 
choices = [population[i] for i in choice_indices] 
+0

'類型錯誤:只有一個元素整數數組可以被轉換成一個index' – roganjosh

+0

@roganjosh使用'範圍(len(人口))' –

+2

這實際上就像一個魅力,就像你選擇= [choice_index]中的[population [i]],而不是'choice = population [choice_index]'作爲'choice_index'是一個'清單' –