多维数组
内置数组的类型名为 Array
。 Julia 中数组的一大特点是,它本身可以是任意维的,这类似于数学中的「张量」。
初始化
julia> Vector # 一维数组 Vector 是数组的特例
Vector{T} where T (alias for Array{T, 1} where T)
julia> Array{Int, 3}(undef, 2, 2, 2) # 生成一个未初始化的 2×2×2 数组
2×2×2 Array{Int64, 3}:
[:, :, 1] =
272741312 284121296
272741312 284121296
[:, :, 2] =
272755984 287668496
272755984 426754624
julia> v = [1 2 3;4 5 6;7 8 9] # 快速生成二维数组
3×3 Matrix{Int64}:
1 2 3
4 5 6
7 8 9
julia> Matrix # 二维数组 Matrix 是数组的特例
Matrix{T} where T (alias for Array{T, 2} where T)
索引
多维数组也可通过下标访问,但与其它一些语言不同的是,访问时使用单对 []
。
julia> v[3, 2]
8
julia> v[2:3, 2:3] # 通过范围访问
2×2 Matrix{Int64}:
5 6
8 9
julia> v[1, 1] = 0 # 通过下标修改
0
杂项
julia> v = [1 2 3] # 注意:生成的也是二维数组
1×3 Matrix{Int64}:
1 2 3
julia> size(v) # 各维度长度
(1, 3)
julia> size(v, 1) # 第一维长度
1
julia> mat = Matrix(undef, 0, 0)
0×0 Matrix{Any}
julia> mat == [[]]
false
可以发现,上例中数组的数组(Vector{Vector}
)与二维数组(Matrix
)是不同的。 许多静态语言中默认的数组都是不可变长数组,进行区分无太大意义,而动态语言中有很大的区别。 例如:数组的数组 [[], [0], [0, 1]]
,它的各个元素(是数组)的长度可以是不同的,而 Matrix
则无法做到这一点。