# Arrays, Matrix, append!

**URL:** https://discourse.julialang.org/t/arrays-matrix-append/46177
**Category:** Performance
**Tags:** arrays, function
**Created:** [September 7, 2020, 6:34am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177 "2020-09-07T06:34:42Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![Lucas\_Gartner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lucas_gartner/32/17747_2.png) [@Lucas\_Gartner](https://discourse.julialang.org/u/Lucas_Gartner)
#### Post date: [September 7, 2020, 6:34am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/1 "2020-09-07T06:34:42Z")

</div>

Hey all,

may you can tell me some insights about the arrays in julia and their dimension. I came from python3.7 and want to translate a python script to julia.

I need to create a list, and iterate through a set of vecs, with each iteration I append this to X\_l. So far so good. I put X\_l into np.array(X\_l). And there for I get with .shape a shape of (4932, 300).

In Julia it would be using set which would be in my case equavilant to unique.  
After all lines of code, I want to convert my multidimensional list into the shape (4932, 300), but when I try it with the [Multi-dimensional Arrays · The Julia Language](https://docs.julialang.org/en/v1/manual/arrays/)  
basic function -for example size- I do not get the correct shape. May you can help me and suggest how I am able to solve this? A little hint would be appreciated to thank you.

kind regards,  
Lucas

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [September 7, 2020, 7:46am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/2 "2020-09-07T07:46:47Z")

</div>

It would be much easier to help if you posted an MWE.

> [@Please read: make it easier to help you](https://discourse.julialang.org/t/psa-make-it-easier-to-help-you/14757):
>
> Welcome to the Julia Discourse! We are enthusiastic about helping Julia programmers, both beginner and experienced. This public service announcement (PSA) outlines best practices when asking for help. Following these points makes it easier for us to help you and more likely you’ll get a prompt, useful answer. Keywords are highlighted to make it easier to refer to specific points. Choose a descriptive title that captures the key part of your question, eg “plots with multiple axes” instead of …

---

<div class="post-metadata">

### Author: ![Lucas\_Gartner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lucas_gartner/32/17747_2.png) [@Lucas\_Gartner](https://discourse.julialang.org/u/Lucas_Gartner)
#### Post date: [September 8, 2020, 5:52am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/3 "2020-09-08T05:52:18Z")

</div>

Here is the MWE:

**python 3.7**

> import numpy as np
> 
> # Variables
> 
> en\_fr = {  
> ‘the’: ‘la’,  
> ‘and’: ‘et’,  
> ‘was’: ‘était’,  
> ‘for’: ‘pour’  
> }  
> english\_vecs = {  
> ‘the’: np.asarray([0.08007812, 0.10498047, 0.04980469]),  
> ‘and’: np.asarray([7.12890625e-02, -2.58789062e-02, 1.81884766e-02]),  
> ‘was’: np.asarray([6.44531250e-02, 8.64257812e-02, -1.69921875e-01]),  
> ‘for’: np.asarray([-1.17797852e-02, -4.73632812e-02, 4.46777344e-02])  
> }
> 
> X\_l = list()  
> english\_set = set(english\_vecs.keys()) # Dictionary keys  
> for en\_word, fr\_word in en\_fr.items(): #en\_fr is a Dictionary  
> if en\_word in english\_set:  
> en\_vec = english\_vecs[en\_word]  
> X\_l.append(en\_vec)
> 
> X = np.array(X\_l)  
> X.shape # (4, 3)

**Julia 1.5.1**

> # Variables
> 
> #en\_fr = Dict()  
> en\_fr = Dict([  
> “the”=\> “la”,  
> “and”=\> “et”,  
> “was”=\> “était”,  
> “for”=\> “pour”  
> ])
> 
> english\_vecs = Dict([  
> “the”=\> [0.08007812, 0.10498047, 0.04980469],  
> “and”=\> [7.12890625e-02, -2.58789062e-02, 1.81884766e-02],  
> “was”=\> [6.44531250e-02, 8.64257812e-02, -1.69921875e-01],  
> “for”=\> [-1.17797852e-02, -4.73632812e-02, 4.46777344e-02]  
> ])
> 
> X\_l =
> 
> english\_set = unique(keys(english\_vecs))
> 
> for (en\_word, fr\_word) in en\_fr  
> println(en\_word, fr\_word)  
> if en\_word in english\_set  
> en\_vec = english\_vecs[en\_word]  
> append!(X\_l, en\_vec)  
> end  
> end  
> X = X\_l  
> size(X)

I know that I am missing the np.array when I translate python to Julia but I could not found any good suggestion atm. May anyone is able to help me? Thanks in advance!

---

<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: [September 8, 2020, 5:57am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/4 "2020-09-08T05:57:27Z")

</div>

Your MWE didn’t work for me:

```julia
>>> X_l = list()
>>> english_set = set(english_vecs.keys()) # Dictionary keys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

for en_word, fr_word in en_fr.items(): #en_fr is a Dictionary
#if condition
en_vec = english_vecs[en_word]
X_l.append(en_vec)NameError: name 'english_vecs' is not defined
>>>
>>> for en_word, fr_word in en_fr.items(): #en_fr is a Dictionary
... #if condition
... en_vec = english_vecs[en_word]
  File "<stdin>", line 3
    en_vec = english_vecs[en_word]
      X_l.append(en_vec) ^
IndentationError: expected an indented block
>>> X_l.append(en_vec)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'en_vec' is not defined

```

did I do something wrong?

---

<div class="post-metadata">

### Author: ![Lucas\_Gartner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lucas_gartner/32/17747_2.png) [@Lucas\_Gartner](https://discourse.julialang.org/u/Lucas_Gartner)
#### Post date: [September 8, 2020, 5:59am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/5 "2020-09-08T05:59:03Z")

</div>

May It was not a clear MWE, actually I posted it too fast. I will generate a better one.

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [September 8, 2020, 6:37am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/6 "2020-09-08T06:37:46Z")

</div>

Please quote your code with backticks.

---

<div class="post-metadata">

### Author: ![Lucas\_Gartner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lucas_gartner/32/17747_2.png) [@Lucas\_Gartner](https://discourse.julialang.org/u/Lucas_Gartner)
#### Post date: [September 8, 2020, 8:31am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/7 "2020-09-08T08:31:01Z")

</div>

updated my post, thank you.

---

<div class="post-metadata">

### Author: ![AndiMD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/andimd/32/6531_2.png) [@AndiMD](https://discourse.julialang.org/u/AndiMD)
#### Post date: [September 8, 2020, 9:43am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/8 "2020-09-08T09:43:52Z")

</div>

You could use `push!` instead of `append!`. The result is a vector of vectors. Concatenate into a Matrix with `X_l2 = reduce(hcat,X_l) |> permutedims` to get shape (4, 3).

---

<div class="post-metadata">

### Author: ![Lucas\_Gartner](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lucas_gartner/32/17747_2.png) [@Lucas\_Gartner](https://discourse.julialang.org/u/Lucas_Gartner)
#### Post date: [September 8, 2020, 10:03am UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/9 "2020-09-08T10:03:24Z")

</div>

that worked, thank you AndiMD!

---

<div class="post-metadata">

### Author: ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)
#### Post date: [September 8, 2020, 12:35pm UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/10 "2020-09-08T12:35:14Z")

</div>

One thing I think is nice to mention is that, in Julia, you can write explicitly what you want using simple definitions and loops, and obtain an efficient code. In this case, you could have done, for example (after using `push!`):

```julia
X = zeros(length(X_l),length(X_l[1]))
for i in 1:length(X_l)
  for j in 1:length(X_l[i])
    X[i,j] = X_l[i][j]
  end
end
println(size(X))
@show X

```

This less compact, but many times it is easier to write your own small function than to search for a library to do what you want (this code can be made shorter in several ways, depending on the familiarity you have with the Julia syntax).

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [September 8, 2020, 12:42pm UTC](https://discourse.julialang.org/t/arrays-matrix-append/46177/11 "2020-09-08T12:42:50Z")

</div>

> [@lmiq](#):
>
> ```julia
> X = zeros(length(X_l),length(X_l[1]))
> for i in 1:length(X_l)
> for j in 1:length(X_l[i])
> X[i,j] = X_l[i][j]
> end
> end
> 
> ```

A comprehension `X = [X_l[i][j] for i in eachindex(X_l), j in eachindex(X_l[1])]` is also a good option for constructing arrays via loops.
