For loop with file number

6 次查看(过去 30 天)
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

采纳的回答

Stephen23
Stephen23 2018-9-6
编辑:Stephen23 2018-9-6
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.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Structures 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by