Understanding indexing and the colon operator

21 visualizaciones (últimos 30 días)
Hilary Gaiser
Hilary Gaiser el 9 de En. de 2019
Editada: Stephen23 el 9 de En. de 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

Respuesta aceptada

Stephen23
Stephen23 el 9 de En. de 2019
Editada: Stephen23 el 9 de En. de 2019
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 comentarios
Stephen23
Stephen23 el 9 de En. de 2019
Editada: Stephen23 el 9 de En. de 2019
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.
Shubham Gupta
Shubham Gupta el 9 de En. de 2019
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.

Iniciar sesión para comentar.

Más respuestas (1)

Shubham Gupta
Shubham Gupta el 9 de En. de 2019
Editada: Shubham Gupta el 9 de En. de 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 comentario
Stephen23
Stephen23 el 9 de En. de 2019
Editada: Stephen23 el 9 de En. de 2019
@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.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by