我试图在 Julia 中构建一个两元素数组,其中每个子数组都有不同的类型(一个是 Int64
的向量,另一个是 Float32
的数组)。
下面的代码会自动转换我想成为 Int64
的元素成Float32
,这是我不想要的:
my_multitype_array = [ collect(1:5), rand(Float32,3) ]
生成的数组会自动转换 Int64
第一个数组中的 s(通过 collect(1:5)
定义)转换为 Float32
,以及由此产生的 my_multitype_array
有类型 2-element Array{Array{Float32,1}}
.如何强制它使第一个子阵列保持Int64
?我是否需要预先定义 my_multitype_array
在用值填充之前是一个包含两个所需类型元素的空数组?最后,一旦我有了不同类型的所需数组,在函数中预先声明它的类型时,我将如何引用它?请参阅下文了解我的意思:
function foo_function(first_scalar_arg::Float32, multiple_array_arg::Array{Array{Float32,1}})
# do stuff
return
end
而不是 ::Array{Array{Float32,1}}
, 我会写 ::Array{Array{Any,1}}
或者其他的东西?
最佳答案
我认为以下代码更符合问题中的要求:
julia> a = Union{Array{Int},Array{Float64}}[[1,2,3],rand(2,2)]
2-element Array{Union{Array{Float64,N} where N, Array{Int64,N} where N},1}:
[1, 2, 3]
[0.834902264215698 0.42258382777543124; 0.5856562680004389 0.6654033155981287]
这将创建一个实际的数据结构,它知道它包含 Float64
或 Int
数组。一些用法
julia> a[1]
3-element Array{Int64,1}:
1
2
3
julia> a[2]
2×2 Array{Float64,2}:
0.834902 0.422584
0.585656 0.665403
并操纵结构:julia> push!(a, [1, 1]); #works
julia> push!(a, [true, false]);
ERROR: MethodError: no method matching Union{Array{Float64,N} where N, Array{Int64,N} where N}(::Array{Bool,1})
关于arrays - Julia:初始化不同类型的数值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62995851/