在 Julia 中,如果我使 x = rand(10,2)
,那么
>> typeof(x)
Matrix{Float64} (alias for Array{Float64, 2})
如何访问类型参数,即如何获取数组 x
是 Float64
和 2
的数组?
最佳答案
(顺便说一句:正如您的标题所说,您不是在寻找“子类型”,而是在寻找“类型参数”。)
元素类型很容易用eltype
获取:
jl> eltype(x)
Float64
维度可以从数组的size
中获取:
jl> length(size(x))
2
编辑:最好使用 ndims
:
jl> ndims(x)
2
如果您无权访问 x
本身,而只能访问其类型,eltype
仍然有效:
jl> T = typeof(x);
jl> eltype(T)
Float64
维度有点难。您可以检查类型变量的属性(但我不建议这样做,因为这是该类型的内部实现细节,可能不稳定):
jl> T.parameters
svec(Float64, 2)
jl> T.parameters[2]
更好的方法可能是创建一个函数来为您获取此信息:
jl> dims(::Type{<:AbstractArray{T, N}}) where {T, N} = N
dims (generic function with 3 methods)
jl> dims(T)
2
编辑:您也可以将 ndims
与类型变量一起使用:
jl> ndims(T)
2
所以,实际上,答案是:eltype
表示元素类型,ndims
表示维数,无论是数组还是类型一个数组。
关于arrays - 如何获取数组类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67821272/