how to create a for loop 380:780?

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!

 Respuesta aceptada

the cyclist
the cyclist el 13 de Sept. de 2019
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 comentarios

vicsm
vicsm el 13 de Sept. de 2019
Editada: vicsm el 13 de Sept. de 2019
not working
the cyclist
the cyclist el 13 de Sept. de 2019
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 el 13 de Sept. de 2019
Editada: vicsm el 13 de Sept. de 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 el 13 de Sept. de 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 el 13 de Sept. de 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 el 13 de Sept. de 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 el 13 de Sept. de 2019
Thank you for noticing. Indeed, I uploaded the wrong one. Comment edited!
the cyclist
the cyclist el 13 de Sept. de 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 el 13 de Sept. de 2019
I does work, thank you!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 13 de Sept. de 2019

Comentada:

el 13 de Sept. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by