Julia 中的数组类型提升

jcr*_*udy 5 julia type-promotion

在 Julia 中,我可以promote用来使各种类型的对象兼容。例如:

>promote(1, 1.0)
(1.0,1.0)
>typeof(promote(1, 1.0))
(Float64, Float64)
Run Code Online (Sandbox Code Playgroud)

但是,如果我promote在数组上使用,它不会给我我想要的:

>promote([1], [1.0])
([1],[1.0])
>typeof(promote([1], [1.0]))
(Array{Int64,1},Array{Float64,1})
Run Code Online (Sandbox Code Playgroud)

我想要的是将Int64数组转换为Float64数组,所以我得到如下内容:

>promote_array([1], [1.0])
([1.0],[1.0])
>typeof(promote_array([1], [1.0]))
(Array{Float64,1},Array{Float64,1})
Run Code Online (Sandbox Code Playgroud)

promote_array是我编造的一个假设函数。我正在寻找一个真正的功能来做同样的事情。Julia 中是否有一个函数可以promote_array执行上述操作?

jcr*_*udy 4

我找到了该函数Base.promote_eltype,我可以用它来获得我想要的东西:

function promote_array(arrays...)
  eltype = Base.promote_eltype(arrays...)
  tuple([convert(Array{eltype}, array) for array in arrays]...)
end
Run Code Online (Sandbox Code Playgroud)

然后这个promote_array函数给我我正在寻找的输出:

>promote_array([1], [1.0])
([1.0],[1.0])
>typeof(promote_array([1], [1.0]))
(Array{Float64,1},Array{Float64,1})
Run Code Online (Sandbox Code Playgroud)

上面解决了我的问题,尽管 的存在Base.promote_eltype表明可能有一个我还不知道的已经构建的解决方案。