"end-1" as parameter
조회 수: 71 (최근 30일)
이전 댓글 표시
I have a question on MATLAB Onramp Chapter 5.1 Indexing into Arrays, Task 3:
Under what "real" scenario would I use the "end-1" command to find a value?
In the given example of MATLAB Onramp, the task is to find the value in the 6th row and 3rd column. I understand that I can use the keyword "end" to either find a row or column index to reference of the last element, which is quick and straightforward in a dataset, but why would I use the "end-1" as parameter? Doesn't it make it too complicated to find an "unknown" value?
Any further explanation on this is much appreciated.
댓글 수: 2
John D'Errico
2016년 9월 9일
It would help if you provide a link. Without that or a copy of the code/question, it is difficult to know what you are talking about.
채택된 답변
Guillaume
2016년 9월 9일
Well, end-1 is not an unknown location. It's the element before the last. There are plenty of scenarios where you'd want the nth element before the end, so end-n is very useful. e.g.:
- Implementing a LIFO (Last In First Out) stack. When you want to pop the last element from the stack:
function [stack, element] = pop(stack)
element = stack(end); %get last element
stack = stack(1:end-1); %return the stack without the last element
end
- When you want to remove the border around an image:
function croppedimage = cropborder(sourceimage, bordersize)
croppedimage = sourceimage(bordersize+1:end-bordersize, bordersize+1:end-bordersize, :);
end
- split a vector into two:
function [firsthalf, secondhalf] = splitmiddle(vector)
firsthalf = vector(1:ceil(end/2));
secondhalf = vector(ceil(end/2)+1:end);
end
- etc.
댓글 수: 0
추가 답변 (2개)
Steven Lord
2016년 9월 9일
Let's say I wanted to add each element of a vector to the next element. I could do this with a for loop, or I could use a vectorized approach. But I can't add the last element of the vector with the next element -- there isn't a next element! So I add every element of the vector EXCEPT the last (which I retrieve using the index vector 1:end-1) to the one just after that (which I retrieve using the index vector (1:end-1)+1 or 2:end.)
x = 1:10;
y = x(1:end-1) + x(2:end);
We introduced in release R2016a a function named movsum that you could use instead to compute y, but the indexing approach works back probably to Cleve's original Fortran version of MATLAB.
댓글 수: 0
커뮤니티
더 많은 답변 보기: 원격 교육 커뮤니티
참고 항목
카테고리
Help Center 및 File Exchange에서 Downloads에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!