# Programming in JuliaMultidimensional Arrays

We've seen a couple exercises that involve dealing with matrices as an array of arrays. This gets quite tedious if you have to deal with matrices often, because many common tasks require custom methods with this approach (for example, simply selecting a column).

Since multidimensional arrays are very common in scientific computing, Julia has a built-in multidimensional array type. In other words, Julia arrays can be arranged in a rectangle or a cube, etc. The syntax for inputting a rectangular array involves separating rows with semicolons and row elements with spaces: `A = [1 2 3; 4 5 6; 7 8 9]`

. Alternatively, you can use the newline character to separate rows:

A = [ 1 2 3 4 5 6 7 8 9 ]

We can find the dimensions of `A`

using `size(A)`

. For example, the size of the matrix `A`

defined above is `size(A,1)`

or `size(A,2)`

.

To index a multidimensional array, we use commas to separate selectors for each dimension. For example, `A[2:3,:]`

selects the second row through the third row and all of the columns (the lone colon is short for `1:end`

).

Array comprehension syntax works with multidimensional arrays as well. Just separate the index iterators with a comma:

```
julia> [i^2 + j^2 for i in 1:3, j in 1:5]
3×5 Array{Int64,2}:
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
```

As you can see in the first line of the above output, the type of an array prints as `Array{T,d}`

where `T`

is the type of the array's entries and `d`

is the number of dimensions.

Random arrays can be generated in Julia using `rand`

(uniform in the interval ) or `randn`

(standard normal distribution). These functions take an integer argument to specify the length of the output array.

rand(10) # a vector of ten Unif([0,1])'s randn(10) # a vector of ten standard normals rand([3,5,11],100) # a vector of 100 samples from the array [3,5,11]

The random number generator can be *seeded* to ensure it produces the same results when run repeatedly:

using Random Random.seed!(123) rand(), rand()

The two calls to `rand`

yield

**Exercise**

Succinctly generate the following two-dimensional array

store it to a variable, and write a line of code to select the submatrix

Hint: you might want to use the function `rem`

—look it up from a Julia session to check how it works.

*Solution.* `A = [rem(i+j,5) for i=0:4,j=0:4]`

generates the first matrix and stores it to the variable `A`

. Then `A[end-1:end,:]`

takes the last two rows of `A`

.