在 Julia 中构造 Array{Any} 时防止类型更改
Prevent type changes when constructing an Array{Any} in Julia
我想像这样创建一个数组{Any}:
julia> Array{Any}([false , 0.5, 5 ])
3-element Vector{Any}:
0.0
0.5
5.0
但它将 Bool 和整数转换为浮点数。但是当我有一个字符串时,它不会进行类型转换。
julia> Array{Any}([false,0.5,5,"test"])
4-element Vector{Any}:
false
0.5
5
"test"
简单的解决方法是创建数组,然后将每个条目手动转换为我最初编写的类型。或者执行第二个选项,然后删除最后一个条目。有没有一种更简洁(最好是一行)的方法来使数组完全符合我最初编写的类型?
就这样:
julia> Any[false, 0.5, 5]
3-element Vector{Any}:
false
0.5
5
注意:
julia> [false, 0.5, 5]
3-element Vector{Float64}:
0.0
0.5
5.0
因此,它正在创建 Float64
的 Vector
,因为这是一种捕获所有值并用 Vector{Any}()
包装的类型,为时已晚。
如果你不关心类型和编译加速你可以这样写:
julia> [false,0.5,5,"test"]
4-element Vector{Any}:
false
0.5
5
"test"
如果你更关心类型,你可以使用这个:
julia> a = Union{Bool, Float64, Int, String}[false, 0.5, 5, "test"]
4-element Vector{Union{Bool, Float64, Int64, String}}:
false
0.5
5
"test"
更好但不是很好。异构数组在 Julia 中不是一个好习惯。使用 composite types or tuples 构建您的数据使事情更具可读性(和自我记录)并且可能会提高您的表现。
我想像这样创建一个数组{Any}:
julia> Array{Any}([false , 0.5, 5 ])
3-element Vector{Any}:
0.0
0.5
5.0
但它将 Bool 和整数转换为浮点数。但是当我有一个字符串时,它不会进行类型转换。
julia> Array{Any}([false,0.5,5,"test"])
4-element Vector{Any}:
false
0.5
5
"test"
简单的解决方法是创建数组,然后将每个条目手动转换为我最初编写的类型。或者执行第二个选项,然后删除最后一个条目。有没有一种更简洁(最好是一行)的方法来使数组完全符合我最初编写的类型?
就这样:
julia> Any[false, 0.5, 5]
3-element Vector{Any}:
false
0.5
5
注意:
julia> [false, 0.5, 5]
3-element Vector{Float64}:
0.0
0.5
5.0
因此,它正在创建 Float64
的 Vector
,因为这是一种捕获所有值并用 Vector{Any}()
包装的类型,为时已晚。
如果你不关心类型和编译加速你可以这样写:
julia> [false,0.5,5,"test"]
4-element Vector{Any}:
false
0.5
5
"test"
如果你更关心类型,你可以使用这个:
julia> a = Union{Bool, Float64, Int, String}[false, 0.5, 5, "test"]
4-element Vector{Union{Bool, Float64, Int64, String}}:
false
0.5
5
"test"
更好但不是很好。异构数组在 Julia 中不是一个好习惯。使用 composite types or tuples 构建您的数据使事情更具可读性(和自我记录)并且可能会提高您的表现。