Мое длинное название темы в значительной степени охватывает это.
Мне удалось изолировать мою гораздо более серьезную проблему в следующем надуманном примере ниже. Я не могу понять, в чем именно проблема, хотя я думаю, что это как-то связано с типом предварительно выделенного массива?
using ForwardDiff
function test()
A = zeros(1_000_000)
function objective(A, value)
for i=1:1_000_000
A[i] = value[1]
end
return sum(A)
end
helper_objective = v -> objective(A, v)
ForwardDiff.gradient(helper_objective, [1.0])
end
Ошибка читается следующим образом:
ERROR: MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{getfield(Main, Symbol("##69#71")){Array{Float64,1},getfield(Main, Symbol("#objective#70")){Array{Float64,1}}},Float64},Float64,1})
В моей собственной проблеме (не описанной здесь) у меня есть функция, которую мне нужно оптимизировать с помощью Optim и предлагаемого ею автоматического дифференцирования, и эта функция использует большую матрицу, которую я хотел бы предварительно выделить, чтобы ускорить мой код . Большое спасибо.