loadind data loop fastly?
2 views (last 30 days)
Show older comments
Hi everybody, Please i have this code that load data too long time, i want to read it fastly(reduce time execution), somebody can i help me?
%Data is the 381x247x3 matrix; if true
LastGood = floor((122.5 - 50) / Header.Fstep) + 1 - 1; % value =29
FirstGood = ceil((140 - 50) / Header.Fstep) + 1 + 1; % value =38
disp(LastGood); % value =29
disp(FirstGood); % value =38
disp(size(Data, 2)); % value =247
for(k = 1:size(Data, 2))
InterpolazioneReale1 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,real(Data(1:LastGood,k,1)),real(Data(FirstGood:end,k,1))),'splineinterp');
InterpolazioneReale2 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,real(Data(1:LastGood,k,2)),real(Data(FirstGood:end,k,2))),'splineinterp');
InterpolazioneReale3 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,real(Data(1:LastGood,k,3)),real(Data(FirstGood:end,k,3))),'splineinterp');
InterpolazioneImmaginaria1 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,imag(Data(1:LastGood,k,1)),imag(Data(FirstGood:end,k,1))),'splineinterp');
InterpolazioneImmaginaria2 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,imag(Data(1:LastGood,k,2)),imag(Data(FirstGood:end,k,2))),'splineinterp');
InterpolazioneImmaginaria3 = fit(cat(2,[1:LastGood],[FirstGood:381])',cat(1,imag(Data(1:LastGood,k,3)),imag(Data(FirstGood:end,k,3))),'splineinterp');
Data(LastGood + 1:FirstGood - 1,k,1) = InterpolazioneReale1(LastGood + 1:FirstGood - 1) + i * InterpolazioneImmaginaria1(LastGood + 1:FirstGood - 1);
Data(LastGood + 1:FirstGood - 1,k,2) = InterpolazioneReale2(LastGood + 1:FirstGood - 1) + i * InterpolazioneImmaginaria2(LastGood + 1:FirstGood - 1);
Data(LastGood + 1:FirstGood - 1,k,3) = InterpolazioneReale3(LastGood + 1:FirstGood - 1) + i * InterpolazioneImmaginaria3(LastGood + 1:FirstGood - 1);
end
end
6 Comments
Accepted Answer
OCDER
on 10 Oct 2017
Edited: OCDER
on 10 Oct 2017
Not sure if this is faster or not, but your code could be simplified a lot. If you have parallel computing toolbox, you could divide slow jobs across N cores.
LastGood = floor((122.5 - 50) / Header.Fstep) + 1 - 1; % value =29
FirstGood = ceil((140 - 50) / Header.Fstep) + 1 + 1; % value =38
disp(LastGood); % value = 29
disp(FirstGood); % value = 38
disp(size(Data, 2));% value = 247
X = [1:LastGood, FirstGood:381]';
parfor z = 1:3
Tdata = Data(:, :, z);
for k = 1:size(Tdata, 2) %Or do parfor here instead
InterpReal = fit(X, real(Tdata(X, k)), 'splineinterp');
InterpImag = fit(X, imag(Tdata(X, k)), 'splineinterp');
Range = LastGood + 1:FirstGood - 1;
Tdata(Range, k) = InterpReal(Range) + 1j * InterpImag(Range); %NOTE: 1j is now sqrt(-1)
end
Data(:, :, z) = Tdata;
end
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!