Delete rows in struct based on number of elements in field
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have a 1x68 struct with 7 fields - Scouts. I want to delete rows where the number of elements under a field 'Vertices' is less than 20. How do I do this? I tried;
Scouts.Vertices(numel(Scouts.Vertices<20)) = []
but got Error using < Too many input arguments.
I would prefer not to run a loop.
Also tried this but comes back as rows = []
[rows,~] = find(numel(Scouts.Vertices)>10);
2 comentarios
Stephen23
el 22 de Ag. de 2022
"I have a 1x68 struct with 7 fields - Scouts. I want to delete rows ..."
Your structure only has one row.
Respuesta aceptada
Rik
el 22 de Ag. de 2022
If you mean you want to remove elements from your struct, you're fairly close already. Scouts.Vertices returns a comma separated list. You need to feed that to a function that will capture the output.
You could do this:
tmp={Scouts.Vertices};
tmp=cellfun('prodofsize',tmp);
ind = find(tmp>10);
But using a loop would be much simpler.
You could also use structfun, but that would only hide the loop and increase complexity as well.
2 comentarios
Rik
el 22 de Ag. de 2022
I may have been thinking of arrayfun. I don't believe I have used either of them recently. I don't think I have ever used arrayfun, other than in proving it's slower than a loop. But thank you for the correction.
Más respuestas (0)
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!