MATLAB Answers

0

Understanding indexing and the colon operator

Asked by Hilary Gaiser on 9 Jan 2019
Latest activity Edited by Stephen Cobeldick on 9 Jan 2019
I am working on a problem for class and I am trying to understand the solution to a practice problem. The function code is below. I am not understanding the end-n+1:end portion and how that returns the top right columns of a matrix. I understand that 1:n returns the 1st through n rows of the matrix. If someone could explain this clearly to me I would appreciate it. Thanks!
function A = top_right(A,n)
A = A(1:n,end-n+1:end);
end

  0 Comments

Sign in to comment.

Tags

2 Answers

Answer by Stephen Cobeldick on 9 Jan 2019
Edited by Stephen Cobeldick on 9 Jan 2019
 Accepted Answer

The end keyword simply refers to the last column (it can also be used for rows, etc.):
In your example it is basically equivalent to this:
C = size(A,2); % i.e. the last column
A(1:n,C-n+1:C);
but clearly saves a bit of typing and makes things neater. If C is the last column, then C-n+1:C will give the last n columns.

  3 Comments

Ok, I read through the links which were helpful but I am still a little confused. It would seem then that in the case of n = 3 you would get end-4:end which would mean the fourth from last to the end ? but it doesn't it gets the third from last to the end. I am not understanding why the +1 is there. Thank you for your help.
Check your addition: for n=3 the code end-3+1 == end-2, because -3+1 == -2, not -4.
The +1 gives exactly the last n columns. Consider these:
  • end-0:end will give the last column only (equivalent to end by itself),
  • end-1:end will give the last two columns,
  • end-2:end will give the last three columns,
  • end-3:end will give the last four columns,
  • etc.
Notice the pattern: the number of returned columns is always 1 more than the number subtracted from end. So if the number subtracted from end is n and you want n columns, it is neccesary to +1.
When n = 3 ,' end-n+1' will become 'end-2' not 'end-4'. Also, 'end-4' is NOT fourth from last it actually is fifth from the last.

Sign in to comment.


Answer by SHUBHAM GUPTA on 9 Jan 2019
Edited by SHUBHAM GUPTA on 9 Jan 2019

When you use 'end' for indexing, it means that you want to use 'last' index of the array. So, for e.g. if A is a 3x4 matrix and n = 2 then,
A(1:n,end-n+1:n) % Edited from A(1:n,end-1+n ) [ Thanks Stephen ]
will mean
A(1:2,4-2+1:4)
Note: 'end' = 4( number of columns ) when writing on column side and 'end' = 3 (number of rows ) when writing on row side

  1 Comment

@SHUBHAM GUPTA: how is this useful?:
A(1:n,end-1+n:n)
For any n>1 this will return nothing at all because end-1+n will be beyond the last column, and for n==1 it returns nothing unless A has only one column. Your example:
A(1:2,4-1+2:4)
is actually equivalent to this:
A(1:2,5:4)
which is equivalent to this:
A(1:2,[])
This is not what the question asked about, you have mixed up the order of the terms.

Sign in to comment.