Il problema è che l'elenco di tuple è interpretato come un array 2D, mentre choice
funziona solo con array 1D o interi (interpretati come "scegli dall'intervallo"). Vedi the documentation.
Quindi, un modo per risolvere questo problema è passare lo len
dell'elenco di tuple e quindi selezionare gli elementi con il rispettivo indice (o indici), come descritto nello other answer. Se si attiva lista_elegir
in un np.array
, questo funzionerà anche per più indici. Tuttavia, ci sono due problemi:
In primo luogo, il modo in cui si richiama la funzione, probabilit
saranno interpretati come parametro terzo, replace
, non come le probabilità, vale a dire, la lista viene interpretato come un valore booleano , significa che scegli con la sostituzione, ma le probabilità effettive vengono ignorate. È possibile controllare facilmente passando il terzo parametro come [1, 0, 0]
. Utilizzare invece p=probabilit
. In secondo luogo, le probabilità devono riassumere fino a 1, esattamente. I tuoi sono solo 0.999
. Sembra che dovrai modificare leggermente le probabilità o lasciare tale parametro come None
se sono tutte uguali (assumendo quindi una distribuzione uniforme).
>>> probabilit = [0.333, 0.333, 0.333]
>>> lista_elegir = np.array([(3, 3), (3, 4), (3, 5)]) # for multiple indices
>>> indices = np.random.choice(len(lista_elegir), 2, p=probabilit if len(set(probabilit)) > 1 else None)
>>> lista_elegir[indices]
array([[3, 4],
[3, 5]])
fonte
2015-06-13 18:36:08
Se si desidera disegnare elementi con uguale probabilità, è possibile utilizzare 'random.choice 'dalla lib standard. – cel
Ho la versione numpy sbagliata, quindi non posso testare, ma secondo [la documentazione] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html#numpy.random .choice), hai provato a rendere la lista una 'matrice' numerica? Inoltre, sembra che manchi il terzo parametro 'replace'. –