数组数组的预分配
Pre-allocation of array of array
在 julia 中,可以使用
预分配给定 type
和 dims
的数组
A = Array{<type>}(undef,<dims>)
10x10 浮点矩阵示例
A = Array{Float64,2}(undef,10,10)
但是,对于数组预分配的数组,似乎无法为底层数组提供预分配。
例如,如果我想初始化一个由 n
复数浮点矩阵组成的向量,我只能想出这个语法,
A = Vector{Array{ComplexF64,2}}(undef, n)
但是我怎么能预先分配向量中每个数组的大小,除非之后有一个循环?我试过
A = Vector{Array{ComplexF64,2}(undef,10,10)}(undef, n)
这显然行不通。
请记住,“分配”的意思是“给我一个连续的内存块,大小刚好 blah
”。对于数组的数组,它实际上是指向其他连续块的连续指针块,这通常作为组合操作实际上没有意义——后面的块可能完全不同。
但是,通过陈述您的问题,您清楚地表明您实际上有更多的结构信息:您知道您有 n
10x10 数组。从概念上讲,这确实是一个 3D 数组:
A = Array{Float64}(undef, n, 10, 10)
到那时,你可以只取切片,或者更好:沿第一个轴的视图,如果你需要它们的数组:
[@view A[i, :, :] for i in axes(A, 1)]
这是 AbstractArrays
的长度 n
数组,在所有方面都像您想要的单个 10x10 数组。
在您所描述的情况下,您需要使用理解:
a = [Matrix{ComplexF64}(undef, 2,3) for _ in 1:4]
这会分配 Vector
个 Array
。在 Julia 的理解中,您可以迭代更多维度,因此也可以使用更高维度。
在 julia 中,可以使用
预分配给定type
和 dims
的数组
A = Array{<type>}(undef,<dims>)
10x10 浮点矩阵示例
A = Array{Float64,2}(undef,10,10)
但是,对于数组预分配的数组,似乎无法为底层数组提供预分配。
例如,如果我想初始化一个由 n
复数浮点矩阵组成的向量,我只能想出这个语法,
A = Vector{Array{ComplexF64,2}}(undef, n)
但是我怎么能预先分配向量中每个数组的大小,除非之后有一个循环?我试过
A = Vector{Array{ComplexF64,2}(undef,10,10)}(undef, n)
这显然行不通。
请记住,“分配”的意思是“给我一个连续的内存块,大小刚好 blah
”。对于数组的数组,它实际上是指向其他连续块的连续指针块,这通常作为组合操作实际上没有意义——后面的块可能完全不同。
但是,通过陈述您的问题,您清楚地表明您实际上有更多的结构信息:您知道您有 n
10x10 数组。从概念上讲,这确实是一个 3D 数组:
A = Array{Float64}(undef, n, 10, 10)
到那时,你可以只取切片,或者更好:沿第一个轴的视图,如果你需要它们的数组:
[@view A[i, :, :] for i in axes(A, 1)]
这是 AbstractArrays
的长度 n
数组,在所有方面都像您想要的单个 10x10 数组。
在您所描述的情况下,您需要使用理解:
a = [Matrix{ComplexF64}(undef, 2,3) for _ in 1:4]
这会分配 Vector
个 Array
。在 Julia 的理解中,您可以迭代更多维度,因此也可以使用更高维度。