Array{T}(undef, dims)
我是Julia的新手,并且没有很好的编程背景。用这种语法,为什么要undef用来创建数组?
If we don't type constructor, Julia will automatically create a constructor. Then, Why we use constructor?
首先,您想了解什么是构造函数:为此,我建议您使用Julia doc:Julia中的构造函数
有了理论,现在让我们分解一下这个表达式:
a = Array{Int}(undef, (2, 2))
Run Code Online (Sandbox Code Playgroud)
这种表达的意思是“我想a成为Array维度(2,2)的一个”。因此,朱莉娅会要求一些内存空间。当我在Julia REPL上写它时:
julia> a = Array{Int}(undef, (2, 2))
2×2 Array{Int64,2}:
0 0
0 0
Run Code Online (Sandbox Code Playgroud)
现在Array{T}(undef, dims)是该概括。“构造具有T特定数量维的特定类型的数组dims”
到目前为止,我还没有解释什么undef。undef是的快捷方式UndefInitializer()。在此示例中,我们需要一个未初始化的数组。这是什么意思?为此,您必须了解并不是在终端上按常规创建变量。它们在计算机内存中占据特定位置。有时,同一内存空间被另一个变量占用。因此,我的新变量可以占用的空间可能不为空:
julia> a = Array{Float64}(undef, (2, 2))
2×2 Array{Float64,2}:
6.94339e-310 6.94339e-310
6.94339e-310 0.0
Run Code Online (Sandbox Code Playgroud)
在这里,我从未要求这些价值观存在。我可以删除它以使用一个干净的变量。但这将意味着删除每个单元格的值,并且计算机要替换每个值而不是声明“这里是新变量”要昂贵得多。
因此,基本上,undef未初始化的数组用于性能目的。如果要对数组进行良好的初始化,则可以使用fill。