Elegant / Vectorized way of getting array from start_index vector and end_index vector?

4 vues (au cours des 30 derniers jours)
Hello
Suppose start_index = [1 5 10]; and end_index = [3 8 12];
Is there an elegant solution to get an output of [1 2 3 5 6 7 8 10 11 12], that is the function takes each start value and gives all inclusive values between the start and end value, repeats with the next index, until all inclusive values are included in a single output vector?
Thank you

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 16 Mar 2013
Modifié(e) : Azzi Abdelmalek le 16 Mar 2013
EDIT
v=[1 2 3 5 6 7 8 10 11 12]
start_index = [1 5 10];
end_index = [3 8 12];
out=cell2mat(arrayfun(@(x,y) x:y,start_index, end_index,'un',0))
out=intersect(out,v)
  1 commentaire
Evan
Evan le 16 Mar 2013
Lines 2~4 were what I needed. Brilliant, exactly what I was looking for. Thanks! :)

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 16 Mar 2013
Modifié(e) : Jan le 16 Mar 2013
start_index = [1 5 10];
end_index = [3 8 12];
index(end_index + 1) = -1; % Implicit pre-allocation
index(start_index) = 1;
result = find(cumsum(index));
In many cases logical indexing is more efficient:
result = (cumsum(index(1:end-1)) == 1);
An even more efficient method is FEX: mcolon.

Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by