# Converting Vector{Any} to Tuple of Floats

**URL:** <https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714>\
**Category:** New to Julia\
**Created:** [August 19, 2018, 3:29pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714 "2018-08-19T15:29:59Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Elmer\_Cusipuma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elmer_cusipuma/32/11958_2.png) [@Elmer\_Cusipuma](https://discourse.julialang.org/u/Elmer_Cusipuma)\
**Post date:** [August 19, 2018, 3:29pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/1 "2018-08-19T15:29:59Z")

</div>

I am trying convert Vector{Any} to Tuple of Floats using function Tuple

julia\> N = Any[5,2,3,4,4,5,0,1,5,6,9,7,8,9,9,20,2,2,6,6,5,4,5,6,8,5,4];

julia\> Tuple{Float64}(N)  
(5.0,)

How to convert the Vector N to Tuple of Floats in all elements (without loops)?

---

<div class="post-metadata">

**Author:** ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)\
**Post date:** [August 19, 2018, 3:36pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/2 "2018-08-19T15:36:13Z")

</div>

`Tuple(Float64(x) for x in N)`

---

<div class="post-metadata">

**Author:** ![felipenoris](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/felipenoris/32/553_2.png) [@felipenoris](https://discourse.julialang.org/u/felipenoris)\
**Post date:** [August 19, 2018, 5:54pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/3 "2018-08-19T17:54:16Z")

</div>

This is very useful! Should be in the docs about tuples.

---

<div class="post-metadata">

**Author:** ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)\
**Post date:** [August 19, 2018, 10:23pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/4 "2018-08-19T22:23:11Z")

</div>

And why not just

```julia
Tuple(1.0N)

```

?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [August 19, 2018, 10:37pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/5 "2018-08-19T22:37:04Z")

</div>

That allocates an extra `Array`.

---

<div class="post-metadata">

**Author:** ![Seif\_Shebl](https://avatars.discourse-cdn.com/v4/letter/s/eada6e/32.png) [@Seif\_Shebl](https://discourse.julialang.org/u/Seif_Shebl)\
**Post date:** [August 19, 2018, 10:40pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/6 "2018-08-19T22:40:11Z")

</div>

```julia
julia> @btime Tuple(Float64(x) for x in N);
  5.474 μs (57 allocations: 1.42 KiB)

julia> @btime Tuple(1.0N);
  2.167 μs (90 allocations: 2.31 KiB)

```

1.5X more allocations with 2.5X more speed!

---

<div class="post-metadata">

**Author:** ![johann.spies](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johann.spies/32/8805_2.png) [@johann.spies](https://discourse.julialang.org/u/johann.spies)\
**Post date:** [August 20, 2018, 10:39am UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/7 "2018-08-20T10:39:50Z")

</div>

Interesting. On Julia 0.6.4 I get:

```julia
julia> @btime Tuple(Float64(x) for x in N);
  5.386 μs (65 allocations: 1.98 KiB)

julia> @btime Tuple(1.0N);
  20.139 μs (159 allocations: 4.16 KiB)

```

and on 1.0

```julia
julia> @btime Tuple(Float64(x) for x in N);
  6.836 μs (57 allocations: 1.42 KiB)

julia> @btime Tuple(1.0N); 
  2.660 μs (90 allocations: 2.31 KiB)

```

---

<div class="post-metadata">

**Author:** ![traktofon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/traktofon/32/591_2.png) [@traktofon](https://discourse.julialang.org/u/traktofon)\
**Post date:** [August 20, 2018, 12:04pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/8 "2018-08-20T12:04:48Z")

</div>

Other variants: `Float64.(Tuple(N))` or `Float64.(tuple(N...))`

```julia
julia> @btime Float64.(Tuple($N))
  895.109 ns (5 allocations: 1.22 KiB)

julia> @btime Float64.(tuple($N...))
  840.075 ns (4 allocations: 912 bytes)

```

(on julia-0.7)

---

<div class="post-metadata">

**Author:** ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)\
**Post date:** [August 20, 2018, 1:05pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/9 "2018-08-20T13:05:15Z")

</div>

(Julia v1) those ^ benchmark best for various lengths of N, Real types  
with (a) slightly better than (b)

(a) T1.(tuple(Vector{T2}…,)) where {T1\<:Real, T2\<:Real}

(b) T1.(Tuple(Vector{T2}) where {T1\<:Real, T2\<:Real}

---

<div class="post-metadata">

**Author:** ![Elmer\_Cusipuma](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elmer_cusipuma/32/11958_2.png) [@Elmer\_Cusipuma](https://discourse.julialang.org/u/Elmer_Cusipuma)\
**Post date:** [August 20, 2018, 1:19pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/10 "2018-08-20T13:19:47Z")

</div>

Thank you very much for the example.  
I have one more question. What is the use of the $ operator before N?

---

<div class="post-metadata">

**Author:** ![traktofon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/traktofon/32/591_2.png) [@traktofon](https://discourse.julialang.org/u/traktofon)\
**Post date:** [August 20, 2018, 1:32pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/11 "2018-08-20T13:32:38Z")

</div>

The `$` is a particular feature of the BenchmarkTools.jl package, and only valid inside its macros (like `@btime`). The problem is that global variables in expressions often lead to type instability and extra allocations, and the `$` is used to replace such variables/expressions via “interpolation”. See [here](https://github.com/JuliaCI/BenchmarkTools.jl/blob/master/doc/manual.md#interpolating-values-into-benchmark-expressions) for a description of this feature.

---

<div class="post-metadata">

**Author:** ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)\
**Post date:** [August 20, 2018, 2:08pm UTC](https://discourse.julialang.org/t/converting-vector-any-to-tuple-of-floats/13714/12 "2018-08-20T14:08:50Z")

</div>

when using BenchmarkTools to time `myfunction(x)`, the `x` gets a `$` in front of itself so the timing macro interprets it as if it were being used in a call rather than as a value given once, at the setup for benchmarking `@btime myfunction($x)`
