# How to initialize an empty vector of Float64

**URL:** <https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082>\
**Category:** New to Julia\
**Created:** [April 23, 2020, 12:34pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082 "2020-04-23T12:34:08Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![QUANG\_VU\_NGUY\_N\_PH\_M](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quang_vu_nguy_n_ph_m/32/14299_2.png) [@QUANG\_VU\_NGUY\_N\_PH\_M](https://discourse.julialang.org/u/QUANG_VU_NGUY_N_PH_M)\
**Post date:** [April 23, 2020, 12:34pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/1 "2020-04-23T12:34:08Z")

</div>

```julia
struct A{T}
    time::Vector{Float64}
    data::Vector{T}
end

```

I would like to initialize an empty object of class A

I tried with outer constructor as below

```julia
A() = A([],[])

```

But it failed:

```julia
 julia> a = A()
ERROR: MethodError: no method matching A(::Array{Any,1}, ::Array{Any,1})
Closest candidates are:
  A(::Array{Float64,1}, ::Array{T,1}) where T at none:3
Stacktrace:
 [1] A() at .\none:1
 [2] top-level scope at none:0

```

Thus, I tried to find out how to initialized

```julia
A() = A(Array{Float64}[],[])

```

This is also failed

```julia
julia> a = A()
ERROR: MethodError: no method matching A(::Array{Array{Float64,N} where N,1}, ::Array{Any,1})
Closest candidates are:
  A(::Array{Float64,1}, ::Array{T,1}) where T at none:3
Stacktrace:
 [1] A() at .\none:1
 [2] top-level scope at none:0

```

How should we initialized an emtpy vector of Float64 type?

---

<div class="post-metadata">

**Author:** ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)\
**Post date:** [April 23, 2020, 12:36pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/2 "2020-04-23T12:36:28Z")

</div>

You can do `A() = A(Float64[],[])`.

---

<div class="post-metadata">

**Author:** ![QUANG\_VU\_NGUY\_N\_PH\_M](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quang_vu_nguy_n_ph_m/32/14299_2.png) [@QUANG\_VU\_NGUY\_N\_PH\_M](https://discourse.julialang.org/u/QUANG_VU_NGUY_N_PH_M)\
**Post date:** [April 23, 2020, 12:40pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/3 "2020-04-23T12:40:13Z")

</div>

Perfect. Thank you!

---

<div class="post-metadata">

**Author:** ![mzaffalon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mzaffalon/32/214168_2.png) [@mzaffalon](https://discourse.julialang.org/u/mzaffalon)\
**Post date:** [April 23, 2020, 3:34pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/4 "2020-04-23T15:34:44Z")

</div>

To expand on `@rfourquet`’s answer:

`[]` is a vector of `Any`, but your struct `A` requires a vector of `Float64`.

Moreover `Array{Float64}[]` is a vector of `Vector{Float64}` (you would have elements such as `[[1.0, 2.0], [3.0, 4.0, 5.0]]` for instance), which is why your third attempt fails.

`Float64[]` is also equivalent to `Vector{Float64}(undef, 0)`, which is a vector of `Float64` containing 0 elements of random (undef) content.

---

<div class="post-metadata">

**Author:** ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)\
**Post date:** [April 23, 2020, 3:57pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/5 "2020-04-23T15:57:48Z")

</div>

> [@mzaffalon](#):
>
> `Float64[]` is also equivalent to `Vector{Float64}(undef, 0)` , which is a vector of `Float64` containing 0 elements of random (undef) content.

Note that `Vector{Float64}(undef, 0)` can be abridged to `Vector{Float64}()`. Also, to clarify for beginners, “random content” here doesn’t literally mean “random” but uninitialized (so content which _might_ appear random, but is not initialized with random bits – use `rand` for that).

---

<div class="post-metadata">

**Author:** ![Vasily\_Pisarev](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vasily_pisarev/32/7929_2.png) [@Vasily\_Pisarev](https://discourse.julialang.org/u/Vasily_Pisarev)\
**Post date:** [April 23, 2020, 9:13pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/6 "2020-04-23T21:13:10Z")

</div>

The error in this case is mostly not because of a vector of `Float64` hasn’t been passed, but because the compiler cannot infer type parameter from `A([], [])`.

If you write

```julia
A() = A{Any}([], [])

```

then Julia happily converts the first `[]` to `Float64[]`.

That said, passing `Float64[]` as the first argument is better, as it avoids allocating a temporary `Any[]` just to throw it away.

---

<div class="post-metadata">

**Author:** ![Bardo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bardo/32/21601_2.png) [@Bardo](https://discourse.julialang.org/u/Bardo)\
**Post date:** [November 18, 2021, 10:19pm UTC](https://discourse.julialang.org/t/how-to-initialize-an-empty-vector-of-float64/38082/7 "2021-11-18T22:19:44Z")

</div>

> [@rfourquet](#):
>
> You can do `A() = A(Float64[],[])` .

Shouldn’t it be like below, with the parameter T?

```julia
struct A{T}
    time::Vector{Float64}
    data::Vector{T}
end

A(T) = A(Float64[],T[])

julia>A(Int)
A{Int64}(Float64[], Int64[])

```
