# Octave – Indexes, Vector Indexes and Range Indexes

Indexes allows you to access an elements from a matrix or vector (think about accessing data in a multidimensional Array)

The indexing operator is (), so to access data in Row 2; Column 3 you would do

`A(2,3)`

You are also able to assing a new value to that index

`A(2,3)=4`

Supplying just one index returns a scalar result.

```A(1:2)     # Vector result
A([1:2])   # Column Vector result```

You can also use the colon for a column vector output containing all the elements

```a(:)
a(:)'```

Given the follow

`a = [1, 2; 3, 4]`

all of the following expression are equivalent and select the first row of the matrix

```a(1, [1, 2])    # row 1, columns 1 and 2
a(1, 1:2)       # row 1, columns in range 1 - 2
a(1, : )         # row 1, all columns```

When you have large data sets and you need to select, say, the first 1000 elements in column 1 you would do

`A(1:1000, 1)`

You could also do the following, so that the range can be interpreted as a row vector

`A([1:1000],1)`

If you wanted to select every other row, you would do

`A([1:2:1000),1]`

And if you wanted to pick out the first 1000 rows and the 1500th row

`A([1:1000,1500],:)`

In index expressions the keyword end automatically refers to the last entry for a particular dimension. This magic index can also be used in ranges and typically eliminates the needs to call size or length to gather array bounds before indexing.

```a = [1, 2, 3, 4];

a(1:end/2)        # first half of a =&gt; [1, 2]
a(end + 1) = 5;   # append element
a(end) = [];      # delete element
a(1:2:end)        # odd elements of a =&gt; [1, 3]
a(2:2:end)        # even elements of a =&gt; [2, 4]
a(end:-1:1)       # reversal of a =&gt; [4, 3, 2 , 1]```