2014-12-19 19 views
11

Considerare due array 1-dim, uno con gli elementi tra cui scegliere e uno contenente le probabilità di disegnare l'elemento dell'altra lista.Come selezionare un elemento casuale da un array ponderato in Julia?

items = ["a", 2, 5, "h", "hello", 3] 
weights = [0.1, 0.1, 0.2, 0.2, 0.1, 0.3] 

In Julia, come si può in modo casuale selezionare un elemento in items utilizzando weights di peso la probabilità di disegnare un determinato elemento?

+0

@Prix Grazie per l'aggiornamento. Non è importante indicare la lingua di interesse nel titolo per tale domanda? Forse tra parentesi alla fine della domanda? –

+0

Ok, grazie. In effetti, sarebbe bello poter ordinare i tag. –

+0

Spero che ti piaccia in questo modo, non vedo alcun motivo per non averlo neanche lì, quindi immagino che dipenda dalle preferenze personali;) – Prix

risposta

11

utilizzare il pacchetto StatsBase.jl, vale a dire

Pkg.add("StatsBase") # Only do this once, obviously 
using StatsBase 
items = ["a", 2, 5, "h", "hello", 3] 
weights = [0.1, 0.1, 0.2, 0.2, 0.1, 0.3] 
sample(items, WeightVec(weights)) 

O se volete assaggiare molti:

# With replacement 
my_samps = sample(items, WeightVec(weights), 10) 
# Without replacement 
my_samps = sample(items, WeightVec(weights), 2, replace=false) 

si può imparare di più su WeightVec e perché esiste in the docs. Gli algoritmi di campionamento in StatsBase sono molto efficienti e progettati per utilizzare approcci diversi a seconda delle dimensioni dell'input.