How do you iterate over multiple fields in a structure?

30 Ansichten (letzte 30 Tage)
Anwesh Saha
Anwesh Saha am 21 Jan. 2023
Bearbeitet: Stephen23 am 21 Jan. 2023
I have a 1X1 struct with 48 fields in it. Each field is 1X5120 int 32. I want to downsample each of these fields using the downsample(y, n) function.
However, I would like to accomplish this using a loop. How can it be done?
  1 Kommentar
Stephen23
Stephen23 am 21 Jan. 2023
Bearbeitet: Stephen23 am 21 Jan. 2023
You could make this task easier by improving the data design.
Numbered fieldnames (or variable names) like that is usually a sign that you are doing something wrong.
Rather than forcing meta-data (e.g. pseudo-indices) into the fieldnames like you are doing, your data would be much better stored in a non-scalar structure or a simple cell array. Then you can use basic indexing to loop over the data.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 21 Jan. 2023
Bearbeitet: Stephen23 am 21 Jan. 2023
One approach is to use FIELDNAMES() and dynamic fieldnames:
For example, where S is your scalar structure:
n = 5;
C = fieldnames(S);
for k = 1:numel(C)
F = C{k};
A = S.(F);
B = downsample(A,n);
S.(F) = B;
end
Another simple option is to use STRUCTFUN():
For example:
n = 5;
fnh = @(v) downsample(v,n);
S = structfun(fnh, S)

Weitere Antworten (0)

Kategorien

Mehr zu Structures finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by