When indexing an Array{Float64,2}

julia> A = ones(1,5)

1×5 Array{Float64,2}:

1.0 1.0 1.0 1.0 1.0

julia> A[1,2:5]

4-element Array{Float64,1}:

1.0

1.0

1.0

1.0

Why am I being given an Array{Float64,1}?

I’m expecting to get:

1×4 Array{Float64,2}:

1.0 1.0 1.0 1.0

A slice of a matrix is a vector, so has size `(n,)`

. If you want a `1xn`

matrix back, you can use `A[[1], 2:5]`

, or if you just want it to be a row vector, you can do `A[1, 2:5]'`

1 Like

Depending on your preference, you can also use range indexing.

```
A[1:1, 2: 5]
```

I prefer this, because it’s consistent to that `2:5`

syntax.

3 Likes

Thanks for replying so quickly!

Seems so obvious now I know, thank you

Simple rule: the dimensionality of the output is the summed dimensionality of the indexes. So `A[i,j]`

, where `i`

and `j`

are `Int`

s, gives you a scalar (zero-dimensional). You supplied one scalar and one vector, so you got a 1-dimensional output.

The fun doesn’t stop there. Here’s an example that some other languages would struggle with:

```
julia> v = [10, 20, 30, 40, 50]
5-element Vector{Int64}:
10
20
30
40
50
julia> idx = [1 2;
5 2]
2×2 Matrix{Int64}:
1 2
5 2
julia> v[idx]
2×2 Matrix{Int64}:
10 20
50 20
```

3 Likes