我的长主题标题几乎涵盖了它。
在下面的以下人为示例中,我设法隔离了我更大的问题。我无法弄清楚问题到底出在哪里,尽管我认为它与预分配数组的类型有关?
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 优化的函数,以及它提供的自动微分,并且该函数使用了一个我想预先分配的大矩阵以加速我的代码. 非常感谢。