如何将异构数组(Array {Any})提升为具有单个公共类型元素的同构数组?

时间:2014-04-04 09:45:14

标签: julia

想象一下,例如,有一个像

这样的异构数组
julia> a = {1, 2.2, int32(3), float32(4.4), 5, 6.6}
6-element Array{Any,1}:
 1  
 2.2
 3  
 4.4
 5  
 6.6

其元素的单一常见类型为Float64

是否有函数或minimalistic命令将此类Any数组转换为具有单个公共类型(对于给定示例为Array{Float64})的元素数组,而无需显式写入该类型甚至不知道它预先?

我知道如果使用括号[]来创建数组,那么首先会获得Array{Float64}。但是,问题是关于类型1在创建时无法控制的数组的转换(例如,一些数组解析,从文件读取的数组,......)。

3 个答案:

答案 0 :(得分:5)

您要转换类型的函数称为convert

julia> a = {1, 2.2, int32(3), float32(4.4), 5, 6.6}
f6-element Array{Any,1}:
 1  
 2.2
 3  
 4.4
 5  
 6.6

julia> convert(Array{Float64,1},a)
6-element Array{Float64,1}:
 1.0
 2.2
 3.0
 4.4
 5.0
 6.6

修改 我不确定我理解你的为什么你会想要你想要的行为,但我认为你问的问题的解决方案(不是你有的问题!),是:

[promote(a...)...]

答案 1 :(得分:2)

怎么样:

reshape([a...],size(a)...)

如果您对Vector感到满意,可以使用:

[a...]

答案 2 :(得分:0)

我刚刚发现vcat(a...)也有效。

但我认为@ ivarne的解决方案更可取,因为它明确告诉我们想要做什么。

另一方面,如果没有为数组元素类型定义convert(a...),则{{1}}不起作用。