For loop with file number

6 visualizaciones (últimos 30 días)
Isma_gp
Isma_gp el 6 de Sept. de 2018
Editada: Stephen23 el 6 de Sept. de 2018
I have a for loop as follows:
for ii=1:n_lines
g(ii,:) = data.file_1.maximum(ii,:);
end
I would like to include this for loop into an outer for loop that changes the file number from the structure i.e. file_1, file_2, file_3 etc.
Can I get some help here? Thanks

Respuesta aceptada

Stephen23
Stephen23 el 6 de Sept. de 2018
Editada: Stephen23 el 6 de Sept. de 2018
This can be done with dynamic fieldnames:
for jj = 1:numberOfFields
fld = sprintf('file_%d',jj);
for ii = 1:n_lines
g(ii,:) = data.(fld).maximum(ii,:);
end
...
end
But this is a complex way to store and access your data. Accessing the fieldnames like this, and the required conversion from numeric to char, just makes your code more complex and slows down your code: a much simpler and more efficient way to design your data would be to use a non-scalar structure, then you can simply use indexing directly and efficiently:
for jj = 1:numberOfFields
for ii = 1:n_lines
g(ii,:) = data.file(jj).maximum(ii,:);
end
...
end
And probably avoiding using nested structures altogether would be a better way to design your data:
for jj = 1:numel(data)
data(jj).maximum
data(jj).file
data(jj).data
end
then you could simplify the code that accesses the data, by doing things like this:
g = vertcat(data.maximum)
and you will get all of the maximum matrices concatenated into one numeric array, without any loops or slow dynamic fieldnames. Better data design makes code simpler and more efficient.

Más respuestas (0)

Categorías

Más información sobre Structures en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by