Extract length of data in a structure
19 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Stefanie
el 24 de En. de 2014
Comentada: Andrei Bobrov
el 26 de En. de 2014
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)?
0 comentarios
Respuesta aceptada
Jos (10584)
el 26 de En. de 2014
Still no need for a conversion:
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 = arrayfun(@(x) size(a(x).b,1), 1:numel(a))
keepA = a(lengths>5)
Más respuestas (2)
Jos (10584)
el 24 de En. de 2014
Editada: Jos (10584)
el 24 de En. de 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 comentarios
Patrik Ek
el 24 de En. de 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)
el 26 de En. de 2014
Yes, you're right. But there is really no need for a conversion! See my 2nd answer.
W. Owen Brimijoin
el 24 de En. de 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
0 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!