Create for loop to simplify code and output arrays

I have this code:
len1 = a(4);
st1 = 5; % starting index for first channel
y1 = a(st1: st1+len1-1);
len2 = a(st1+len1);
st2 = st1+len1+1; % starting index for second channel
y2 = a(st2: st2+len2-1);
len3 = a(st2+len2);
st3 = st2+len2+1; % starting index for third channel
y3 = a(st3: st3+len3-1);
len4 = a(st3+len3);
st4 = st3+len3+1;% starting index for fourth channel
y4 = a(st4: st4+len4-1);
This is taking data from a text file and outputting different values for y (i.e y2 = 1524x1 double).
I know there's a simpler for loop I can do but I can't seem to get it right! Can you help?

 Respuesta aceptada

Solution, array to cell needed:
ch = a(1);
len = a(4);
st = 5 ;
y{1} = a(st: st+len-1);
for i = 2 : ch
len(i) = a(st(i-1) + len(i-1 ));
st(i) = st(i-1) + len(i-1) + 1 ;
y{i} = a(st(i):st(i)+len(i)-1 );
end

Más respuestas (2)

Saurav Roy
Saurav Roy el 28 de Abr. de 2020
Hey !
I think this is somwhat close to what you are looking for,
num = length(a);
len = a(4);st = 5;
y = a(st: st+num-1);
for i = 2 : num
len(i) = a(st(i-1) + len(i-1));
st(i) = st(i-1) + len(i-1) + 1;
y(i) = a(st(i):st(i)+len(i)-1);
end

4 comentarios

Hey Saurav!
Thanks for the response. So num should be the number at index 1 of a so i've changed it to num = a(1). Not that that makes a difference (there's usually 4).
I've run your code and i get this error:
Unable to perform assignment because the left and right sides have a different number of elements.
Error in realdata_st (line 42)
y(i) = a(st(i):st(i)+len(i)-1 );
Here is the updated code:
num = a(1);
len = a(4);
st = 5 ;
y = a(st: st+len-1);
for i = 2 : num
len(i) = a(st(i-1) + len(i-1 ));
st(i) = st(i-1) + len(i-1) + 1 ;
y(i) = a(st(i):st(i)+len(i)-1 );
end
Any ideas??
Saurav Roy
Saurav Roy el 28 de Abr. de 2020
Editada: Saurav Roy el 28 de Abr. de 2020
Hey,
what exactly does 'a' represent here ?
a is an array containing all the data from the text file
a(1) is the number of 'channels' (number of y outputs), so in my initial code there would be 4 channels
a(4) contains the value of the length of the data
Then a(5) - a(5 + len-1) is the data
Then the next 'channel' will start.
If this makes sense
Found the solution!

Iniciar sesión para comentar.

Esme Stanford-Durkin
Esme Stanford-Durkin el 28 de Abr. de 2020

0 votos

a is an array containing all the data from the text file
a(1) is the number of 'channels' (number of y outputs), so in my initial code there would be 4 channels
a(4) contains the value of the length of the data
Then a(5) - a(5 + len-1) is the data
Then the next 'channel' will start.
If this makes sense

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by