julia - Julia 中的数组类型提升

标签 julia type-promotion

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

>promote(1, 1.0)
(1.0,1.0)
>typeof(promote(1, 1.0))
(Float64, Float64)

但是,如果我使用 promote在数组上,它没有给我我想要的:
>promote([1], [1.0])
([1],[1.0])
>typeof(promote([1], [1.0]))
(Array{Int64,1},Array{Float64,1})

我要的是Int64要转换为 Float64 的数组数组,所以我得到类似的东西:
>promote_array([1], [1.0])
([1.0],[1.0])
>typeof(promote_array([1], [1.0]))
(Array{Float64,1},Array{Float64,1})

这里promote_array是我编的一个假设函数。我正在寻找一个真正的功能,做同样的事情。 Julia 中是否有一个函数可以做 promote_array以上吗?

最佳答案

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

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

promote_array函数然后给我我正在寻找的输出:
>promote_array([1], [1.0])
([1.0],[1.0])
>typeof(promote_array([1], [1.0]))
(Array{Float64,1},Array{Float64,1})

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

关于julia - Julia 中的数组类型提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235469/

相关文章:

julia - "Base"关键字在 Julia 中是什么意思?

java - 为什么 "short thirty = 3 * 10"是合法分配?

julia - 如何使用 Julia 安装可移植包?

julia - 配置用于在 Julia 中显示 Gadfly 图的浏览器

printing - 如何不在 Julia 中打印类型?

julia - 在 Julia 中添加和调用 Dict 函数

c - 将 float 与大数相乘只需将数字附加在一起

c++ - 当 int 类型的符号不匹配时的 g++ 错误消息

c - 类 C 语言中的提升顺序