Julia 如何将异构数组(数组{Any})升级为具有单一公共类型元素的同构数组?
例如,假设有一个异构数组,如Julia 如何将异构数组(数组{Any})升级为具有单一公共类型元素的同构数组?,julia,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 是否有一个函数或最低限度的命令可以将此类任何数组转换为具有单一公共类型的元素数组(数组{Float64},对于给定的示例),而无需显式编写该类型,甚至事先知道该类型 我知道,如果使用括号[]创建数组,首先将获得数
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
是否有一个函数或最低限度的命令可以将此类任何
数组转换为具有单一公共类型的元素数组(数组{Float64}
,对于给定的示例),而无需显式编写该类型,甚至事先知道该类型
我知道,如果使用括号
[]
创建数组,首先将获得数组{Float64}
。但是,问题是关于在创建时无法控制其类型的数组的转换(例如,某些数组理解、从文件读取的数组等)。要转换类型的函数称为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
编辑:
我不确定我是否理解你为什么想要你所要求的行为,但我认为你所问问题的解决方案(不是你的问题!)是:
我刚刚发现,
vcat(a…)
也可以工作
然而,我认为@ivarne的解决方案更可取,因为它明确地告诉我们想要做什么
另一方面,convert(a…)
如果没有为数组元素类型定义,则它不起作用。如何:
reshape([a...],size(a)...)
如果您对向量满意,可以简单地使用:
[a...]
谢谢@ivarne,但我不想显式地编写类型,甚至不想事先知道哪种类型是唯一的通用类型。对于我给出的示例,公共类型或多或少是显而易见的,但是我想问的是适用于任何异构数组的通用类型(即使单个公共类型是
any
本身)。太好了!这就是我想要的;)关于问题:例如,有时一个类型不安全的函数在数组理解中使用时会导致异构数组。这些问题只会在更复杂的情况下出现,但是你可以从这个最小的例子中得到想法:[randn()>0?1:2.0表示1:10中的uu]
(我知道,这允许更简单的解决方案)。你可以让数组理解生成一个给定类型的同质数组,比如说Float64[randn()>0?1:2.0表示1:10中的u]
是的,我喜欢[a..]
。它调用vcat
。
[a...]