How can I manipulate with fields in structure.

24 visualizaciones (últimos 30 días)
Kiryl Zhaliazka
Kiryl Zhaliazka el 4 de Mzo. de 2022
Respondida: Jan el 4 de Mzo. de 2022
I have struct s with 96 fields that have different names, each field is 44x1 column of numbers.
is it possible to divide all numbers in each field by some number, or use reshape to make from 44*1 to 11*4 matrix, or for example find max from each field and make a new array from those maximum values.

Respuesta aceptada

Voss
Voss el 4 de Mzo. de 2022
You can use structfun() for that:
% creating a struct like yours but with only 3 fields:
s = struct('field1',zeros(44,1),'field2',ones(44,1),'field3',randn(44,1))
s = struct with fields:
field1: [44×1 double] field2: [44×1 double] field3: [44×1 double]
% divide by 7:
s_new = structfun(@(x)x/7,s,'UniformOutput',false)
s_new = struct with fields:
field1: [44×1 double] field2: [44×1 double] field3: [44×1 double]
s_new.field2
ans = 44×1
0.1429 0.1429 0.1429 0.1429 0.1429 0.1429 0.1429 0.1429 0.1429 0.1429
% reshape:
s_new = structfun(@(x)reshape(x,11,4),s,'UniformOutput',false)
s_new = struct with fields:
field1: [11×4 double] field2: [11×4 double] field3: [11×4 double]
% get the max:
s_max = structfun(@max,s)
s_max = 3×1
0 1.0000 2.6450
  2 comentarios
Kiryl Zhaliazka
Kiryl Zhaliazka el 4 de Mzo. de 2022
Thank you so much!
Voss
Voss el 4 de Mzo. de 2022
You're welcome!
If that answers your question, please consider marking the answer as 'Accepted'. Thanks!

Iniciar sesión para comentar.

Más respuestas (1)

Jan
Jan el 4 de Mzo. de 2022
A loop over the field names can achieve this:
s = struct('field1',zeros(44,1),'field2',ones(44,1),'field3',randn(44,1)); % Thanks _
Field = fieldnames(s);
for k = 1:numel(Field)
s.(Field{k}) = s.(Field{k}) / 17;
% Or: s.(Field{k}) = reshape(s.(Field{k}), 4, 11);
end
This is done in structfun also, but the loop runs faster and is easier to read, in my opinion.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by