How to initialize a dictionary with empty arrays of type Array{Float64, 2}?

Hi,

can somebody tell me how to initialize a dictionary with empty arrays of type Array{Float64, 2}?

1. Alternative

dict_data = [Dict(name => Array{Float64, 2} for name in [:x1, :x2, :y1, :y2]) for i in 1:10]

dict_data[1][:x1] = zeros(10,4)

2. Alternative

dict_data = [Dict(name => Matrix{Float64} for name in [:x1, :x2, :y1, :y2]) for i in 1:10]

dict_data[1][:x1] = zeros(10,4)

But both lead to the same error message.

ERROR: MethodError: Cannot convert an object of type Array{Float64,2} to an object of type DataType

Best regards

You don’t initialise the arrays, instead you create a dict where all entries contain Array{Float64, 2}, which is a DataType.
Try this:

d = Dict(name => Matrix{Float64}(undef, 0, 0) for name in [:x1, :x2, :y1, :y2])

or, for an array of dicts of matrices, as in your example:

dict_data = [copy(d) for i in 1:10]
d[1][:x1] = zeros(10, 4)

Thanks. Can you explain me or send me a link, where (undef, 0, 0)
of the command Matrix{Float64}(undef, 0, 0) is explained?

In the REPL, see

help?> Matrix

(…)

  Matrix{T}(undef, m, n)

  Construct an uninitialized Matrix{T} of size mĂ—n. See undef.

Also: Multi-dimensional Arrays · The Julia Language

As a side note, it’s slightly more convenient to create an empty Float64 matrix with zeros(0, 0).

it’s also slightly slower since it has to write zeros, but this usually doesn’t matter.

There are not that many zeros to write in a 0x0 matrix, but yes, it’s slower anyway so I guess it takes a different code path.