在Julia中初始化一个空数组,并在其中包含大量的数组

3

我想在Julia 1.1中初始化一个空数组,有6个元素,其中第i个元素由1000个数组组成,这些数组将通过循环填充。例如,如果第i个元素包含3个数组,我可以使用fill([Array{Float64,1},Array{Float64,1} ,Array{Float64,1}],6,1)。但是如何获得1000个空数组而不复制1000次Array{Float64,1}


1
很难理解你的问题。如果你的数组为空,它就不能包含6个元素。此外,你想要一个数组的数组,还是一个数组的数组的数组?最后,Array {Float64}不是数组,它们是类型变量。 - DNF
哦,还有,您是想要“初始化”还是“预分配”? - DNF
我想创建一个空对象,用for循环填充值。我有一个包含6个值的数组,将对其应用1000次函数。该函数返回类型为{Float64,1}的数组。因此,我的空数组将是我想要存储函数返回的1000个数组的地方,这些数组是针对我拥有的6个值的;-) - coolsv
1个回答

2

根据您实际想要做什么,以下是一些示例:

设置空数组:

Original Answer翻译成"最初的回答"

julia> [[Float64[] for a in 1:3] for b in 1:6]
6-element Array{Array{Array{Float64,1},1},1}:
 [[], [], []]
 [[], [], []]
 [[], [], []]
 [[], [], []]
 [[], [], []]
 [[], [], []]

一个未初始化的三维数组,大小为6x3x2(也许使用三维数组比使用数组的数组的数组更方便——这取决于你的使用情况):


julia> Array{Float64,3}(undef, 6, 3, 2)
6×3×2 Array{Float64,3}:
[:, :, 1] =
 9.00033e-316  1.52477e-315  1.52473e-315
 7.95655e-316  1.52477e-315  1.52473e-315
 1.52474e-315  8.18796e-316  1.52477e-315
 7.95655e-316  1.52477e-315  1.52474e-315
 1.52474e-315  1.52473e-315  1.52474e-315
 8.03142e-316  1.52473e-315  1.52477e-315

[:, :, 2] =
 7.97808e-316  1.52473e-315  0.0
 8.07774e-316  1.52474e-315  0.0
 1.52474e-315  1.52473e-315  0.0
 1.52474e-315  1.52473e-315  0.0
 7.96305e-316  0.0           0.0
 1.52473e-315  0.0           0.0

分配了一组未初始化的数组:

最初的回答
julia> [[Vector{Float64}(undef,2) for a in 1:3] for b in 1:6]
6-element Array{Array{Array{Float64,1},1},1}:
 [[1.60704e-315, 1.60693e-315], [5.93041e-316, 1.69135e-315], [1.69002e-315, 1.69135e-315]]
 [[5.93223e-316, 5.93223e-316], [5.92882e-316, 4.94066e-324], [5.93223e-316, 5.93223e-316]]
 [[5.92884e-316, 2.122e-314], [5.92883e-316, 1.60853e-315], [5.93041e-316, 5.92887e-316]]
 [[1.69002e-315, 5.92885e-316], [1.60705e-315, 1.60693e-315], [5.93041e-316, 1.69136e-315]]
 [[1.69002e-315, 1.69136e-315], [5.93223e-316, 5.93223e-316], [5.92882e-316, 5.93043e-316]]
 [[5.93223e-316, 5.93223e-316], [5.92884e-316, 5.93043e-316], [5.92883e-316, 5.93223e-316]]

1
哦,不错!非常有用的方式来创造我想要的 :-) - coolsv
1
这个答案存在一个大问题:别名。在第一个和第三个示例中,您正在使用对同一数组的引用填充结构。尝试 A = fill(fill(Float64[],3),6,1) 然后 push!(A[1][1], 1234)。所有的数组都是相同的。 - DNF
1
@DNF,是的,你说得对 - 我应该使用推导式。我编辑了答案,现在是正确的,谢谢你指出这一点。 - Przemyslaw Szufel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接