How to take the middle of a list?
조회 수: 23 (최근 30일)
이전 댓글 표시
So I am trying to find an efficient way to take the middle numbers of a list so I can match it to another list.
For example:
a = [1 2 3 4 5 6 7 ];
b = [ 8 9 10 ];
I would want to reduce to a = [ 3 4 5 ] so it has the same ammount of values as b. The ideas I have came up with are really specific and don't work well when numbers are changed. So if anyone has any advice it would be greatly appreciated!
Thanks,
William
댓글 수: 0
답변 (2개)
John D'Errico
2023년 6월 15일
"really specific" issues probably means that it makes no sense to ask for the middle 3 elements of a VECTOR (Python has lists, MATLAB just has vectors) when the vector has an even length.
That is, what are the middle 3 elements of the vector V?
V = 1:6
Likewise, what are the middle 4 elements of the vector 1:5?
As long as the parity of vector lengths is the same, then it is pretty easy.
middle = @(V,m) V(((numel(V) - m)/2 + 1):((numel(V) + m)/2));
Now it is easy to do, as long as the length of V and m have the same parity, thus both are either even or odd.
middle(1:6,2)
middle(1:6,4)
Odd parities for both also work.
middle(1:7,1)
middle(1:7,3)
middle(1:7,5)
And it complains when there are mixed parities.
middle(1:3,2)
A well written function would be smarter, and test those parities in advance, and then bounce out with an error message. I'll let you do that part.
댓글 수: 3
John D'Errico
2023년 6월 15일
Actually, I suppose MATLAB does have the concept of a comma separated list, but it is not really anything you use very often.
Image Analyst
2023년 6월 15일
Try this:
a = [1 2 3 4 5 6 7 8 9 10 1 2 3 8 9 10 88 83 99];
b = [ 8 9 10 ];
% Find starting indexes where b is in a:
indexes = strfind(a, b)
댓글 수: 3
Image Analyst
2023년 6월 15일
Well we don't really know what you meant since you didn't explicitly describe when you said you wanted to take a few elements (a sub-vector) and "match it to another list". What does that mean exactly? I thought it meant that you wanted to find where the values in one small vector occurred/matched those in another longer vector. I guess not. Sorry I misinterpreted what you want. If you still need help, explain a lot better what you want.
Dyuman Joshi
2023년 6월 17일
Care to explain where exactly was Image Analyst was rude in their comment?
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!