gpt4 book ai didi

arrays - MethodError: 没有方法匹配 -(::Int64,::Array{Int64,1})

转载 作者:行者123 更新时间:2023-12-03 21:15:45 24 4
gpt4 key购买 nike

我试着玩弄 this Julia 文档中的示例。我的尝试是将细胞分成两部分,每部分的蛋白质含量都是一半。

using OrdinaryDiffEq
const α = 0.3
function f(du,u,p,t)
for i in 1:length(u)
du[i] = α*u[i]/length(u)
end
end
function condition(u,t,integrator) # Event when event_f(u,t) == 0
1-maximum(u)
end
function affect!(integrator)
u = integrator.u
idxs = findall(x->x>=1-eps(eltype(u)),u)
resize!(integrator,length(u)+length(idxs))
u[idxs] ./ 2
u[end-idxs:end] = 0.5
nothing
end
callback = ContinuousCallback(condition,affect!)
u0 = [0.2]
tspan = (0.0,10.0)
prob = ODEProblem(f,u0,tspan)
sol = solve(prob,Tsit5(),callback=callback)
我收到错误: MethodError: no method matching -(::Int64, ::Array{Int64,1}) .我知道 idxs = findall(x->x>=1-eps(eltype(u)),u) 有问题,我试图在 1 和 eps 之间加一个点,但这并没有解决问题。我正在使用 Julia 1.1.1。

最佳答案

运行您的代码,堆栈跟踪指向该行

u[end-idxs:end] = 0.5

这里的问题是 findall即使只找到一个元素,也返回一个数组,例如
julia> findall(x -> x > 2, [1,2,3])
1-element Array{Int64,1}:
3

并且你不能从 end 中减去一个数组在您的索引表达式中。

我对您的代码了解不够,无法弄清楚 idxs应该是,但是如果您希望这仅返回一个元素,您可以使用 first(idxs) (甚至 only(idxs) 在 Julia 1.4 中),或替换 findallfindfirst ,它将索引作为整数(而不是数组)返回。

关于arrays - MethodError: 没有方法匹配 -(::Int64,::Array{Int64,1}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60848767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com