loadind data loop fastly?

2 visualizzazioni (ultimi 30 giorni)
denis bertin
denis bertin il 10 Ott 2017
Commentato: OCDER il 11 Ott 2017
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 Commenti
Jan
Jan il 10 Ott 2017
Modificato: Jan il 10 Ott 2017
Note:
cat(2,[1:LastGood],[FirstGood:381])'
can be simplified to:
[1:LastGood, FirstGood:381]'
Then store this in a variable instead of creating it 6 times.
Performing 6 spline fits for the same locations seems rather inefficient. Could this be simplified?
denis bertin
denis bertin il 10 Ott 2017
Modificato: denis bertin il 10 Ott 2017
Hi JAN SIMON, Yes, could be simplified, but i don't know how! I changed cat(2,[1:LastGood],[FirstGood:381])' to one variable [1:LastGood, FirstGood:381]', there is just a few change performance.
Thank you.

Accedi per commentare.

Risposta accettata

OCDER
OCDER il 10 Ott 2017
Modificato: OCDER il 10 Ott 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
  2 Commenti
denis bertin
denis bertin il 11 Ott 2017
Many Thank's DONALD LEE.
OCDER
OCDER il 11 Ott 2017
You're welcome!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Condensed Matter & Materials Physics in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by