2017-01-19 1 views
0

Je peux très bien échantillonner à partir d'un tableau 1-D. Par exemple.Exemples de lignes d'un tableau dans Julia

julia> a = [1; 2; 3] 
3-element Array{Int64,1}: 
1 
2 
3 
julia> sample(a, myweights, 5) 
5-element Array{Int64,1}: 
1 
2 
1 
3 
3 

Je peux aussi prendre des échantillons pondérés:

julia> myweights = weights([0.8, 0.1, 0.1]) 
StatsBase.WeightVec{Float64,Array{Float64,1}}([0.8,0.1,0.1],1.0) 

julia> sample(a, myweights, 5) 
5-element Array{Int64,1}: 
2 
1 
1 
1 
1 

Je voudrais faire la même chose pour un tableau 2D, mais échantillonnage par ligne et non par un élément. Par exemple. si je le tableau

julia> b = [1 1 1; 2 2 2; 3 3 3] 
3×3 Array{Int64,2}: 
1 1 1 
2 2 2 
3 3 3 

Je voudrais être en mesure de prélever des échantillons non pondérées et pondérées qui me donnent des sorties comme

1 1 1 
2 2 2 
1 1 1 
1 1 1 
3 3 3 

Comment puis-je faire cela?

Répondre

5

La solution est ici plus simple de l'échantillon des indices des lignes, puis l'utiliser pour indexer dans votre matrice:

julia> idxs = sample(indices(b, 1), myweights, 10) 
10-element Array{Int64,1}: 
1 
1 
1 
2 
1 
1 
3 
1 
1 
1 

julia> b[idxs, :] 
10×3 Array{Int64,2}: 
1 1 1 
1 1 1 
1 1 1 
2 2 2 
1 1 1 
1 1 1 
3 3 3 
1 1 1 
1 1 1 
1 1 1