loadind data loop fastly?

3 Ansichten (letzte 30 Tage)
denis bertin
denis bertin am 10 Okt. 2017
Kommentiert: OCDER am 11 Okt. 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 Kommentare
Jan
Jan am 10 Okt. 2017
Bearbeitet: Jan am 10 Okt. 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 am 10 Okt. 2017
Bearbeitet: denis bertin am 10 Okt. 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

OCDER
OCDER am 10 Okt. 2017
Bearbeitet: OCDER am 10 Okt. 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 Kommentare
denis bertin
denis bertin am 11 Okt. 2017
Many Thank's DONALD LEE.
OCDER
OCDER am 11 Okt. 2017
You're welcome!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by