Understanding indexing and the colon operator
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hilary Gaiser
am 9 Jan. 2019
Bearbeitet: Stephen23
am 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 Kommentare
Akzeptierte Antwort
Stephen23
am 9 Jan. 2019
Bearbeitet: Stephen23
am 9 Jan. 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 Kommentare
Stephen23
am 9 Jan. 2019
Bearbeitet: Stephen23
am 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
am 9 Jan. 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.
Weitere Antworten (1)
Shubham Gupta
am 9 Jan. 2019
Bearbeitet: Shubham Gupta
am 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 Kommentar
Stephen23
am 9 Jan. 2019
Bearbeitet: Stephen23
am 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.
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!