#arrays #julia #sample
Вопрос:
Я пытаюсь сделать выборку строкового массива, включив веса для каждого из элементов массива. Конкретно,
new_name_event = sample(events,Weights(dict_betas_choices[string(new_player)][new_zone][string(new_time)][string(new_loc)][string(new_res)]))
>ERROR:
MethodError: no method matching Weights(::Array{Any,1}, ::Float64)
Closest candidates are:
Weights(!Matched::var"#18#V", ::var"#16#S") where {var"#16#S"<:Real, var"#17#T"<:Real, var"#18#V"<:AbstractArray{var"#17#T",1}} at C:Userssemed.juliapackagesStatsBaseZxhK8srcweights.jl:13
Weights(::Any) at C:Userssemed.juliapackagesStatsBaseZxhK8srcweights.jl:16
Stacktrace:
[1] Weights(::Array{Any,1}) at C:Userssemed.juliapackagesStatsBaseZxhK8srcweights.jl:16
[2] top-level scope at .In[22]:62
[3] include_string(::Function, ::Module, ::String, ::String) at .loading.jl:1091
Где,
println(events, typeof(events))
>["Shot", "Duel", "Pass"]Array{String,1}
pesos = dict_betas_choices[string(new_player)][new_zone][string(new_time)][string(new_loc)][string(new_res)]
println(pesos, typeof(pesos), typeof(pesos[1]))
>Any[0.00114591, 0.69774462, 0.30110947] Array{Any,1} Float64
Ответ №1:
Это должно исправить ситуацию в вашем случае:
Float64.(dict_betas_choices[string(new_player)][new_zone][string(new_time)][string(new_loc)][string(new_res)])
Если это ошибка, это будет означать, что ваши данные состоят не только из чисел.
В общем случае вы должны исправить данные в источнике, чтобы они имели eltype
не Any
что иное, как некоторый тип реального числа, например Float64
, как было предложено выше (это должно быть исправлено во время создания структуры данных).