Append to vector of different sizes in for loop

Hi.
How does one append a vector to a another vector within a loop.
I have the code below: Point is i want the signal between the first and second indices of ipts. then the third and fourth et cetera up to the nineteenth to twentieth.
with this code I only get the last part nineteenth to twentieth.
i = 1;
while i < 19;
A = TimeSeries_short(ipts(i):ipts(i+1));
i = i+2;
end
.mat file is attached.

 Respuesta aceptada

Simpler:
S = load('test_file.mat')
S = struct with fields:
TimeSeries_short: [1×47000 single] ipts: [1182 3977 5678 8607 10129 13100 14657 17610 19172 22121 23650 26578 28197 31090 32741 35696 37300 40136 41691 44808]
fun = @(b,e)S.TimeSeries_short(b:e);
out = arrayfun(fun,S.ipts(1:2:end),S.ipts(2:2:end),'uni',0)
out = 1x10 cell array
{1×2796 single} {1×2930 single} {1×2972 single} {1×2954 single} {1×2950 single} {1×2929 single} {1×2894 single} {1×2956 single} {1×2837 single} {1×3118 single}

Más respuestas (1)

dpb
dpb el 14 de Feb. de 2021
The short answer is
i = 1;
A=[];
for i=1:2:numel(ipts)
A = [A;TimeSeries_short(ipts(i):ipts(i+1),:);
end
Normally one frowns on dynamic reallocation, but presuming the overall array is going to be relatively small, the time taken won't be excessive.
If A is going to be very large, then one will want to calculate the final size and compute the indices going in and explicitly set the rows.

6 comentarios

Thank you.
Sorry but this didnt work actually.
I get this message, its probably a simple typo but im not able to correct it.
Index in position 1 exceeds array bounds (must not exceed 1).
Error in Test_file (line 43)
A = [A;TimeSeries_short(ipts(i):ipts(i+1),:)];
any ideas?
Need rest of the error message in context to be able to identify which array it didn't like..
What does
whos ipts TimeSeries_short
return?
>> whos ipts TimeSeries_short
Name Size Bytes Class Attributes
TimeSeries_short 1x51212 204848 single
ipts 1x20 160 double
>>
It doesnt give any other error message than the one i posted previously :/
dpb
dpb el 15 de Feb. de 2021
Editada: dpb el 15 de Feb. de 2021
OK, I presumed a column-wise array, not a vector.
Hence I referenced
T(i1:i2,:)
to pull all rows of the array T, not just a single column. For a vector need just the 1D indexing expression.
A = [A;TimeSeries_short(ipts(i):ipts(i+1))];
instead for a vector (column output); replace semi-colon with comma for row output.
ahh, thank you.

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Preguntada:

el 14 de Feb. de 2021

Editada:

dpb
el 15 de Feb. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by