假设我们在julia中有一个Vector元组(Int64, Int64):
In [1] xx = [(1, 2), (3, 4), (5, 6)]
typeof(xx) == Vector{(Int64, Int64)}
Out[1] true
Run Code Online (Sandbox Code Playgroud)
现在我想构建一个元组的第一个索引的新向量.
In [2] indices = [x[1] for x in xx]
typeof(indices)
Out[2] Array{Any, 1}
Run Code Online (Sandbox Code Playgroud)
我希望它是一种Array{Int64, 1}类型.我怎样才能解决这个问题?
编辑:我使用0.3.9.
Col*_*ers 10
function f()
xx = [(1, 2), (3, 4), (5, 6)]
inds = [ x[1] for x in xx ]
return(inds)
end
y = f()
typeof(y)
Run Code Online (Sandbox Code Playgroud)
最后一行代码返回Array{Int64, 1}.
这里的问题是您在全球范围内工作.对于Julia的类型推断能够发挥其魔力,您需要在本地范围内工作.换句话说,将所有代码包装在函数中.这个规则是非常非常重要的,但是,我自己来自MatLab背景,我可以看到为什么人们会忘记它.请记住,90%的问题都说"为什么我的朱莉娅代码会变慢?" 发生的原因是用户在全局范围内工作,而不是本地范围.
ps,即使在局部范围内,循环理解的类型推断也可能在特别复杂的情况下绊倒.这是一个已知问题,正在进行中.如果您想为编译器提供一些"帮助",您可以执行以下操作:
inds = Int[ x[1] for x in xx ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |