gpt4 book ai didi

julia - 函数中 julia 中的抽象类型数组

转载 作者:行者123 更新时间:2023-12-03 18:30:31 25 4
gpt4 key购买 nike

我尝试理解 Julia 中的输入,但遇到以下问题 Array .我写了一个函数 bloch_vector_2d(Array{Complex,2}) ;详细的实现是无关紧要的。打电话时,这里是投诉:

julia> bloch_vector_2d(rhoA)
ERROR: MethodError: no method matching bloch_vector_2d(::Array{Complex{Float64},2})
Closest candidates are:
bloch_vector_2d(::Array{Complex,2}) at REPL[56]:2
bloch_vector_2d(::StateAB) at REPL[54]:1
Stacktrace:
[1] top-level scope at REPL[64]:1
问题是父类型的数组不会自动成为子类型数组的父级。
julia> Complex{Float64} <: Complex
true

julia> Array{Complex{Float64},2} <: Array{Complex,2}
false
我认为在 Julia 中强加 Array{Complex{Float64},2} <: Array{Complex,2} 是有意义的。 .或者在 Julia 中实现这一点的正确方法是什么?任何帮助或意见表示赞赏!

最佳答案

这个问题在 Julia 手册 here 中有详细讨论。 .
引用其中的相关部分:

In other words, in the parlance of type theory, Julia's type parameters are invariant, rather than being covariant (or even contravariant). This is for practical reasons: while any instance of Point{Float64} may conceptually be like an instance of Point{Real} as well, the two types have different representations in memory:

  • An instance of Point{Float64} can be represented compactly and efficiently as an immediate pair of 64-bit values;
  • An instance of Point{Real} must be able to hold any pair of instances of Real. Since objects that are instances of Real can be of arbitrary size and structure, in practice an instance of Point{Real} must be represented as a pair of pointers to individually allocated Real objects.

现在回到你的问题如何编写方法签名,那么你有:
julia> Array{Complex{Float64},2} <: Array{<:Complex,2}
true
注意区别:
  • Array{<:Complex,2}表示所有二维数组类型的联合,其 eltype 是 Complex 的子类型(即没有数组将具有这种确切的类型)。
  • Array{Complex,2}是数组可以具有的类型,这种类型意味着您可以存储 Complex其中可以具有混合参数的值。

  • 下面是一个例子:
    julia> x = Complex[im 1im;
    1.0im Float16(1)im]
    2×2 Array{Complex,2}:
    im 0+1im
    0.0+1.0im 0.0+1.0im

    julia> typeof.(x)
    2×2 Array{DataType,2}:
    Complex{Bool} Complex{Int64}
    Complex{Float64} Complex{Float16}
    还要注意符号 Array{<:Complex,2}和写一样 Array{T,2} where T<:Complex (或更紧凑的 Matrix{T} where T<:Complex )。

    关于julia - 函数中 julia 中的抽象类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64785326/

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