Extract length of data in a structure
Ältere Kommentare anzeigen
I have a structure with arrays of different size inside:
STRUC(1).meas=ones(101,2)
STRUC(2).meas=ones(34,2)
STRUC(3).meas=ones(33,2)
STRUC(4).meas=ones(101,2)
now I want to get an index, which shows me all entries, where the size of STRUC.meas is > 100:
idx=[1 4]
so that I can filter all entries of STRUC with this condition (incl. other fields) with
STRUC(idx)
As I understand structfun is only for scalar structs... is there an easy and elegant way (if possible without for-loop)?
Akzeptierte Antwort
Weitere Antworten (2)
Jos (10584)
am 24 Jan. 2014
Bearbeitet: Jos (10584)
am 24 Jan. 2014
a(1).b=ones(4,8);
a(2).b=ones(8,1);
a(3).b=ones(3,2);
a(4).b=ones(7,1);
lengths = structfun(@(x) size(x,1), a)
keepA = a(lengths>5)
2 Kommentare
Patrik Ek
am 24 Jan. 2014
Sorry, this will not work on a struct array. structfun works only on scalar structs, thus the struct array need to be converted to a format matlab can handle.
Jos (10584)
am 26 Jan. 2014
Yes, you're right. But there is really no need for a conversion! See my 2nd answer.
W. Owen Brimijoin
am 24 Jan. 2014
If you are intent on avoiding a for-loop, then you could try converting the structure to a cell array and then using a cell function. An example would look something like this:
idx = cellfun(@length,struct2cell(STRUC(:)))>100
idx =
1 0 0 1
Kategorien
Mehr zu Data Type Identification finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!