2017-01-19 6 views
0

Я могу выбрать из массива с 1-мерным размером. Например.Примеры строк из массива в 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 

Я могу также принять взвешенные образцы:

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 

Я хотел бы сделать то же самое для 2D-массива, но выборки по строкам, а не элементом. Например. если у меня есть массив

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 

Я хотел бы, чтобы иметь возможность принимать невзвешенные и взвешенные образцы, которые дают мне выходы, как

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

Как я могу это сделать?

ответ

5

Самым простым решением здесь является образцом из индексов строк, а затем использовать его в качестве индекса в вашей матрице:

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