gpt4 book ai didi

Julia 矩阵{AbstractFloat} 类型问题

转载 作者:行者123 更新时间:2023-12-04 07:13:43 28 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Question about Julia type syntax: Why is Array{Int32, 1} <: Array{Integer, 1} false?

(3 个回答)


5 天前关闭。




语境
Julia: what does the "<:" symbol mean? ,第二个回答直接引用了三个Julia's documentation for the <: operator .第三个让我困惑。
问题
为了使这个问题独立于引用的问题,我将举一个特定的例子。

julia> 1.3 isa AbstractFloat
true
julia> [1.3 1.3; 1.2 1.2] isa Matrix{Float64}
true
julia> [1.3 1.3; 1.2 1.2] isa Matrix{AbstractFloat}
false
来自 Julia 的文档, AbstractFloat是所有浮点值的抽象类型,例如 Float32 , Float64等。这就是第一个例子的解释。但是,我不明白为什么 Float64 的矩阵不是 AbstractFloat 的矩阵.

最佳答案

你必须要做:

julia> [1.3 1.3; 1.2 1.2] isa Matrix{<:AbstractFloat}
true
因为 Julia 中的类型参数是不变的。
这个有详细解释 here .
如果链接的解释不清楚,请评论您需要其他信息的地方,我可以扩展有问题的区域。
编辑
从不同角度的解释(也许它也会有帮助)。
  • 正如所解释的 here Julia :

  • One particularly distinctive feature of Julia's type system is that concrete types may not subtype each other: all concrete types are final and may only have abstract types as their supertypes. While this might at first seem unduly restrictive, it has many beneficial consequences with surprisingly few drawbacks.


    这样做的原因是具体类型具有具体的内存布局,尤其是 Matrix{Float64}Matrix{AbstactFloat}有不同的内存布局。如果我们希望编译器发出高效的机器代码,那么了解对象的内存布局至关重要。
  • 现在都Matrix{AbstractFloat}Matrix{Float64}是具体类型(它们可以有实例):
  • julia> Matrix{AbstractFloat}(undef,0,0)
    0×0 Matrix{AbstractFloat}

    julia> Matrix{Float64}(undef,0,0)
    0×0 Matrix{Float64}

    julia> isconcretetype(Matrix{AbstractFloat})
    true

    julia> isconcretetype(Matrix{Float64})
    true
  • 结果Matrix{Float64}不能是 Matrix{AbstractFloat} 的子类型(反之亦然)
  • 关于Julia 矩阵{AbstractFloat} 类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68905292/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com