Asked by Hilary Gaiser
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

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.

Hilary Gaiser
on 9 Jan 2019

Stephen Cobeldick
on 9 Jan 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
on 9 Jan 2019

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

Stephen Cobeldick
on 9 Jan 2019

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.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.