MATLAB: Using structfun with nested structures

non-scalarstructfun

Hi everyone,
I have an overarching structure, with nested substructure, in the following format:
overarching(k).nested
with k=1:8. These nested structures have different sizes, and I was trying to compute the size of each nested structure using structfun as follows:
nested_size=structfun(@size,overarching,'UniformOutput',0)
However, the input structure is non-scalar, and it does not work. I can get the size of each nested structure using a loop to iterate on the nested structures, but I would like to avoid loops if possible. Is there a way of doing this using structfun, that I am not aware of?
Thank you in advance for your help!

Best Answer

The structfun function only works on scalar struct arrays, iterating over the fields of that scalar struct. While you could use arrayfun, it may be easier to understand (and perform just as well) if you use a for loop. I know people have said "Don't use for loops in MATLAB, they're slow." While that may have been true in the past (and you can still write a for loop so it is slow in current MATLAB) the performance of for loops have increased significantly with the improvements we have made to MATLAB over the years.
Besides a for loop over 8 elements of a struct array calling size is highly unlikely, in my experience, to be the bottleneck in your code.