Append to vector of different sizes in for loop

17 views (last 30 days)
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.

Accepted Answer

Stephen23
Stephen23 on 15 Feb 2021
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}

More Answers (1)

dpb
dpb on 14 Feb 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 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!