# NamedArrays question / request

**URL:** <https://discourse.julialang.org/t/namedarrays-question-request/49021>\
**Category:** Internals & Design\
**Tags:** package\
**Created:** [October 26, 2020, 3:16am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021 "2020-10-26T03:16:03Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [October 26, 2020, 3:16am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/1 "2020-10-26T03:16:03Z")

</div>

Using NamedAarrays.jl I can define an array as:

```julia
x = NamedArray( zeros(2,3,4),
    (
        [:A, :B],
        [:X, :Y, :Z],
        1:4
    ),
        (:Dim1, :DimXYZ, :DimNum)
   )

```

I’d like to write it as:

```julia
  x = NamedArray( value = 0, dim_struct = 
       (
           :Dim1 = [:A, :B],
           :DimXYZ = [:X, :Y, :Z],
           :DimNum = 1:4
       ))

```

Using a named tuple of arrays to represent the dimension structure and item names,  
and have the system take the length of each dimension from the length of each array.

Similarly I can specify x[:A, :, :]  
But it would by nice to write it as x.Dim1.A

Are there any packages that allow this?

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [October 26, 2020, 6:05am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/2 "2020-10-26T06:05:15Z")

</div>

There are definately some packages with nicer syntax for this - like DimensionalData.jl and AxisKeys.jl. But I don’t think they the getproperty “.” syntax! (?) It’s not very array-like, and it forces you to know the order of the indices.

In DimensionalData.jl you would just write

```julia
x = DimArray(zeros(2,3,4), (dim1=[:A, :B], dim2=[:X, :Y, :Z], dimnum=1:4))
x[dim1=:A]

```

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [October 26, 2020, 8:05am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/3 "2020-10-26T08:05:25Z")

</div>

Thanks Raf. Much appreciated

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [October 26, 2020, 9:18am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/4 "2020-10-26T09:18:46Z")

</div>

Is there any way to avoid hard coding the numbers in the zeros function?  
can do this but its not very elegant.

```julia
dims = ( A =[:A, :B], X=[:X, :Y] )

Data = zeros( tuple( length.([dims...])... ) )

A = KeyedArray( Data ; dims... )

```

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [October 26, 2020, 9:57am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/5 "2020-10-26T09:57:38Z")

</div>

What is `KeyedArray` (is that in AxisKeys?) I use `DimArray` day-to-day, as in my example, as I’m the author of DimensionalData.jl…

so using an example I know:

```julia
d = (dim1=[:A, :B], dim2=[:X, :Y, :Z], dimnum=1:4)
A = zeros(map(length, d))
x = DimArray(A, d)

```

---

<div class="post-metadata">

**Author:** ![Lincoln\_Hannah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lincoln_hannah/32/19198_2.png) [@Lincoln\_Hannah](https://discourse.julialang.org/u/Lincoln_Hannah)\
**Post date:** [October 26, 2020, 10:04am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/6 "2020-10-26T10:04:55Z")

</div>

yes, thought I’d try both packages. this bit is quite similar.  
Thanks again. Need a … in the second line: zeros( map(length, d)… )

---

<div class="post-metadata">

**Author:** ![Raf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raf/32/3383_2.png) [@Raf](https://discourse.julialang.org/u/Raf)\
**Post date:** [October 26, 2020, 11:17am UTC](https://discourse.julialang.org/t/namedarrays-question-request/49021/7 "2020-10-26T11:17:40Z")

</div>

right, I didn’t test that time 🙂
