我正在使用Julia 0.4.7,因为我有一些旧代码,在我的应用程序中它比0.5.1快。
我正在尝试计算Int
s的长向量的经验CDF。为此,我使用的是searchsortedlast(data, x)/n
,其中data
是已排序的Vector{Int}
,x
是Int
和n=length(data)
。
我必须计算许多载体的CDF,而且我发现它很慢。我认为减速是因为推断在searchsortedlast
中的某个地方失败(正文中有Any
):
@code_warntype searchsortedlast(data, 2000)
Variables:
v::Array{Int64,1}
x::Int64
Body:
begin $(Expr(:line, 184, symbol("sort.jl"), symbol("")))
return (Base.Sort.searchsortedlast)(v::Array{Int64,1},x::Int64,(Base.Sort.ord)(Base.Sort.isless,Base.Sort.identity,false,Base.Sort.Forward)::Any)::Int64
end::Int64
我查看了searchsortedlast
的{{3}},但我无法弄清楚如何改进那里的推理(有很多方法定义让我困惑,但不是我是专家无论如何朱莉娅程序员)。也许我可以在某处注释某些东西,但不知道在哪里。有人可以帮忙吗?
答案 0 :(得分:3)
除了升级到0.5,问题得到解决之外,你真的无能为力。 0.4根本没有能力在像0.5这样的函数类型上调度,这就是ord
调用类型不稳定的原因。
请注意,这种特殊类型的不稳定性是无害的 - 因为函数的返回类型仍然是稳定的,唯一增加的成本是每次调用时searchsortedlast
的单个动态调度,这是一个小成本比较以搜索大型阵列为代价。