首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MethodError:没有匹配的方法-(::Int64,::Array{Int64,1})

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

Stack Overflow用户
提问于 2020-03-25 20:22:01
回答 1查看 1K关注 0票数 4

我尝试使用Julia文档中的this示例。我的尝试是让细胞分裂成两个部分,每个部分都有一半的蛋白质。

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2020-03-25 21:01:19

运行代码时,堆栈跟踪指向以下行

代码语言:javascript
复制
u[end-idxs:end] = 0.5

这里的问题是,即使只找到一个元素,findall也会返回一个数组,例如

代码语言:javascript
复制
julia> findall(x -> x > 2, [1,2,3])
1-element Array{Int64,1}:
 3

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

我不太理解你的代码,不知道idxs应该是什么,但是如果你希望它只返回一个元素,你可以使用first(idxs) (甚至在Julia1.4中使用only(idxs) ),或者用findfirst替换findall,后者将索引返回为整数(而不是数组)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60848767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档