# More Sub-Indexing

We have seen how one can access a subset of a list by providing a list of desired positions:

>>  A=rand(1,5)
A =
0.6430    0.5461    0.5027    0.0478    0.2289
>> A([2 3 1 1])
ans =
0.5461    0.5027    0.6430    0.6430

There are a few more extensions of this:

It can be used to modify part of a matrix:

%with A as before: 
>> A([1 2])=3+A([3 4])
A =
3.5027    3.0478    0.5027    0.0478    0.2289
%or even:
>> A([3 4])=1
A =
3.5027    3.0478    1.0000    1.0000    0.2289 

Additionally, this works for matrices and submatrices as well:

>> A=magic(4)
A =
16      2     3     13
5     11    10      8
9      7     6     12
4     14    15      1
>> A([2 3], [1 4])
ans =
5     8
9    12
>> A(1:2,3:4)=1
A =
16     2     1     1
5    11     1     1
9     7     6    12
4    14    15     1

The keyword end will evaluate to the size of the dimension of the matrix in which it is located:

>> A=magic(4);
>> A(end,end)
ans =
1
>> A([1 end],[1 end])
ans =
16    13
4     1
>> A([1 end/2], [2, end-1])
ans =
2     3
11    10
>> A(2,1:end)
ans =
5    11    10     8
>> A(1:end,3)
ans =
3
10
6
15
%  1:end is so useful that it has an even shorter notation, :
>> A(:,1)
ans =
16
5
9
4
>> A(4,:)
ans =
4    14    15     1

Finally, a matrix can be accessed with a single index (as opposed to with two) and this implies a specific ordering of the elements (rows first, then columns):

>> A(5)
ans =
2
>> A(4:10)
ans =
4     2    11     7    14     3    10
>> A(:)
ans =
16
5
4
2
11
7
14
3
10
6
15
13
8
12
1

Exercise 9: Practice some of these methods for accessing matrix elements with the following exercises:

• Create a matrix of size $$N\times N$$ that has ones in the border and zeros inside. For example if $$N=3$$ the matrix can be created with
• >> A=ones(3,3); A(2,2)=0
A =
1     1     1
1     0     1
1     1     1

Make this construction depend on $$N$$ and work for any positive integer $$N\ge2$$

• Create a 5x5 matrix whose rows are (1:5)
• Extract the diagonal of a given matrix without using diag (you may use size)
• Flip a given matrix horiztonally. Vertically? Do not use fliplr or flipud
• Extract the anti-diagonal of a given matrix
• Extract the anti-diagonal, without first flipping it (Hint: use single index access)