如何获取数组类型参数

Dav*_*ira 2 arrays types julia

在 Julia 中,如果我 make x = rand(10,2),那么

>> typeof(x)
Matrix{Float64} (alias for Array{Float64, 2})
Run Code Online (Sandbox Code Playgroud)

如何访问类型参数,即如何获得数组xFloat64and的数组2

DNF*_*DNF 6

(顺便说一句:正如您的标题所说,您不是在寻找“子类型”,而是在寻找“类型参数”。)

元素类型很容易获得eltype

jl> eltype(x)
Float64
Run Code Online (Sandbox Code Playgroud)

可以从size数组的 中检索维数:

jl> length(size(x))
2
Run Code Online (Sandbox Code Playgroud)

编辑:更好地使用ndims

jl> ndims(x)
    2
Run Code Online (Sandbox Code Playgroud)

如果您无权访问x自身,而只能访问其类型,则eltype仍然有效:

jl> T = typeof(x);

jl> eltype(T)
Float64
Run Code Online (Sandbox Code Playgroud)

维数有点困难。您可以检查类型变量的属性(但我不建议这样做,因为这是类型的内部实现细节,可能不稳定):

jl> T.parameters
svec(Float64, 2)

jl> T.parameters[2]
Run Code Online (Sandbox Code Playgroud)

更好的方法可能是制作一个函数来为您获取此信息:

jl> dims(::Type{<:AbstractArray{T, N}}) where {T, N} = N
dims (generic function with 3 methods)

jl> dims(T)
2
Run Code Online (Sandbox Code Playgroud)

编辑:您也可以ndims与类型变量一起使用:

jl> ndims(T)
2
Run Code Online (Sandbox Code Playgroud)

所以,实际上,答案是:eltype对于元素类型和ndims维度,无论是当您拥有数组还是拥有数组类型时。