Hi there, my question could easily be solved with a simple loop but I'm curious if there is a nice genuine matlab way of doing this: I have a vector "v1" containing 10 entries. First 5 belong together, next 2 belong together and the last 3 again (somehow). So I got a vector "v2" with v2 = [5; 2; 3]; I want now something like v3 = [1 1 1 1 1 2 2 3 3 3]; So I could access my v1 vector with: v1(v3==1); (Background for the question are different colors for each group with the plot-command.) Thanks already in advance - I'm sure Matlab holds a nice and short way of doing this :-)
Kshitij Singh answered .
2025-11-20
c=cumsum(v2); v3=zeros(1,c(end)); v3([1,c(1:end-1)])=1; v3=cumsum(v3); v3(end)=[],
The cumsum(v2) creates a cumulative sum vector c.
A zero vector v3 is created with a length of the last value in c.
Positions in v3 at 1 and c(1:end-1) are set to 1.
Another cumulative sum is calculated over this v3.
The last element of v3 is removed.
The result is a vector v3 that mirrors the cumulative structure of v2 but adjusted for the specific indexing manipulation.
This process transforms a cumulative indexing approach into a sequential one, useful in various signal processing or data transformation scenarios.