Is it possible to have an empty array of >2 dims?

The function show_nd in arrayshow.jl starts with this:

function show_nd(io::IO, a::AbstractArray, print_matrix::Function, label_slices::Bool)
    limit::Bool = get(io, :limit, false)
    if isempty(a)
        return
    end

This function is called only for arrays that have at least 3 dimensions. I was wondering if it’s possible to have an empty 3D array? I do not know how to construct one.

Sure - Array{Int, 3}(undef, 2,3,4) is a valid call which returns an uninitialized three dimensional array of Ints with size (2,3,4):

julia> Array{Int, 3}(undef, 2,3,4)
2×3×4 Array{Int64,3}:
[:, :, 1] =
 36  10  35
 12  24  16

[:, :, 2] =
 34  24  33
 22  28  31

[:, :, 3] =
 32  31  139790621598032
 34  35  139790621598032

[:, :, 4] =
 139790621598032  139790622082656  139790621598032
 139790621598032  139790622654688  139790552321744

This generalizes to N dimensions as well. There’s also zeros, initializing each element with zero(T):

julia> zeros(Int, 2,3,4)
2×3×4 Array{Int64,3}:
[:, :, 1] =
 0  0  0
 0  0  0

[:, :, 2] =
 0  0  0
 0  0  0

[:, :, 3] =
 0  0  0
 0  0  0

[:, :, 4] =
 0  0  0
 0  0  0

I think here empty means “having 0 elements”. Eg

julia> a = Array{Int}(undef, 0, 0, 0)
0×0×0 Array{Int64,3}

julia> isempty(a)
true
3 Likes

Ah yes, that also makes sense - I was thinking empty as in no useful data :smiley:

Ah of course, thanks very much! This extends to OffsetArrays too where the axes ranges are empty.