Effacer les filtres
Effacer les filtres

loadind data loop fastly?

1 vue (au cours des 30 derniers jours)
denis bertin
denis bertin le 10 Oct 2017
Commenté : OCDER le 11 Oct 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 commentaires
Jan
Jan le 10 Oct 2017
Modifié(e) : Jan le 10 Oct 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 le 10 Oct 2017
Modifié(e) : denis bertin le 10 Oct 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.

Connectez-vous pour commenter.

Réponse acceptée

OCDER
OCDER le 10 Oct 2017
Modifié(e) : OCDER le 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
  2 commentaires
denis bertin
denis bertin le 11 Oct 2017
Many Thank's DONALD LEE.
OCDER
OCDER le 11 Oct 2017
You're welcome!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Condensed Matter & Materials Physics dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by