How to split vector according to conditions?
조회 수: 33 (최근 30일)
이전 댓글 표시
Hello,
I have a quite technical question concerning vectors splitting
Consider I have a vector containing groups of successive values e.g. :
V = [1 2 34 35 36 102 103 104]
This vectors contains the coordinates of another bigger vectors satisfying a specific condition
(e.g. the values of X smaller than 20: X(1) = 13, X(2) = 12, X(34) = 15, X(35) = 3, X(36) = 9, X(102) = 19, X(103) = 12, X(104) = 11)
I would like to split the vector V into (in this case 3) different parts of consecutive values (here [1 2] , [34 35 36] and [102 103 104])
in order to, then, apply a condition for each part, like for example find the smallest value of X in each of these parts (here X(2), X(35),X(104))
Do you have any ideas of how to accomplish this without using any "for" loop?
Thanks a lot!
댓글 수: 0
채택된 답변
Star Strider
2020년 6월 2일
One approach:
V = [1 2 34 35 36 102 103 104];
d = find(diff([0 V]) > 1);
p = diff([1 d numel(V)+1]);
Out = mat2cell(V, 1, p);
V1 = Out{1} % View Output (Delete)
V2 = Out{2} % View Output (Delete)
V3 = Out{3} % View Output (Delete)
The last 3 assignments just show the results (and how to access them), and are not otherwise necessary for the code.
I am not certain how robust this is (it may need to be modified for other vectors), however it works here.
댓글 수: 4
추가 답변 (1개)
David Hill
2020년 6월 2일
Not exactly sure what you are trying to do.
m=[min(X(V(1:2))),min(X(V(3:5))),min(X(V(6:8)))];
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!