Ошибка метода: нет метода, соответствующего весам(::Массив{Любой,1}, ::Float64)

#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 , как было предложено выше (это должно быть исправлено во время создания структуры данных).