Hi,
how can I create a for loop between in this statement
CM4_380 = spec_data(spec_data.wavelength>380 & spec_data.wavelength<381,:);
so it for loops between 380:780? Basically, to make this:
CM4_381 = spec_data(spec_data.wavelength>381 & spec_data.wavelength<382,:);
CM4_382 = spec_data(spec_data.wavelength>382 & spec_data.wavelength<383,:);
CM4_383 = spec_data(spec_data.wavelength>383 & spec_data.wavelength<384,:);
etc. Plus I need to save each of those tables.
Thank you for your help!

 Akzeptierte Antwort

the cyclist
the cyclist am 13 Sep. 2019

0 Stimmen

I would use a cell array, not variable names that also encode an index:
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end

10 Kommentare

vicsm
vicsm am 13 Sep. 2019
Bearbeitet: vicsm am 13 Sep. 2019
not working
Well, given the tiny amount of information you gave in your question, I would say that it certainly does work.
spec_data = struct('wavelength',381.5);
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
That code results in exactly what I would expect.
So, instead of just saying "not working", it would be better if you gave more context, uploaded your full code (or at least a portion that we can run), and the full text of any error message you are getting.
vicsm
vicsm am 13 Sep. 2019
Bearbeitet: vicsm am 13 Sep. 2019
Sorry. Here is my entire code:
load raw_CM4_19.mat
numfiles = length(txtFiles);
spec_data = [];
for k = 1:numfiles
spec = table(txtFiles(k).wavelength,txtFiles(k).irradiance,'VariableNames',{'wavelength','irradiance'});
spec = spec(spec.wavelength>380 & spec.wavelength<781,:);
spec_data = vertcat(spec_data,spec);
end
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
the cyclist
the cyclist am 13 Sep. 2019
I see that my code does indeed give an error here. But for the MAT file you uploaded, spec_data is empty, because numfiles is 0, because txtFiles is empty.
So, it's not a good test case, it seems.
vicsm
vicsm am 13 Sep. 2019
Well, that's weird because for me it's working just fine...spec_data is 54672x2, because numfiles is 48, because txtFiles is a 48x1 structure.
the cyclist
the cyclist am 13 Sep. 2019
Are you sure you uploaded the file you intended to? In your code, it is called raw_CM_19.mat, but the file you uploaded is raw_CM4_19.mat.
vicsm
vicsm am 13 Sep. 2019
Thank you for noticing. Indeed, I uploaded the wrong one. Comment edited!
the cyclist
the cyclist am 13 Sep. 2019
So, is there still a problem? Your code runs to completion for me, and fills in the cells I would expect.
I would suggest
for ic = 380:780
CM4{ic-380+1} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
unless you have a use for CM4{1} to CM4{379}
vicsm
vicsm am 13 Sep. 2019
I does work, thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Tags

Gefragt:

am 13 Sep. 2019

Kommentiert:

am 13 Sep. 2019

Community Treasure Hunt

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

Start Hunting!

Translated by