代码之家  ›  专栏  ›  技术社区  ›  M.Patil

从结构的多个字段中提取行

  •  3
  • M.Patil  · 技术社区  · 6 年前

    将创建列向量(100行)的结构(25个字段)。如何提取其特定的行。例如,

    s.a=[1 2 3 4 5 6]'
    s.b=[5 2 8 1 0 4]'
    s.c=[9 7 0 1 3 5]'
    % 2 to 4 rows to be extracted
    % expected output
    t.a=[2 3 4]'
    t.b=[2 8 1]'
    t.c=[7 0 1]'
    

    结构上的索引不起作用。 什么是一般的方法?

    3 回复  |  直到 6 年前
        1
  •  1
  •   amahmud    6 年前

    只需选择结构中的特定行。

    % getting the fieldnames of the struct
    field = fieldnames(s)
    
    % length of the struct
    
    len = length(field)
    
    startRow = 2;
    endRow = 4;
    
    for ii = 1:1:len
       t.(field{ii,1}) = s.(field{ii,1})(startRow:endRow)
    end
    
        2
  •  7
  •   obchardon    6 年前

    你可以简单地使用 structfun

    t = structfun(@(x)x(2:4),s,'UniformOutput',false)
    
        3
  •  1
  •   Prostagma user6136315    6 年前

    使用函数 struct2array 若要将结构转换为数组,请提取行,然后再转换回。

    s.a=[1 2 3 4 5 6]';
    s.b=[5 2 8 1 0 4]';
    s.c=[9 7 0 1 3 5]';
    lowest_row=2;
    highest_row=4;
    num_of_fields=length(fieldnames(s)); % Will be 25 in your code
    
    mat = struct2array(s); % Convert struct to matrix
    extracted_mat = mat(lowest_row:highest_row,:); % Extract wanted rows from mat
    
    abc_vec=char(97:122);
    
    % Convert back to struct
    for i=1:num_of_fields
        t.(abc_vec(i))=extracted_mat(:,i);
    end