Matlab结构 - 仅复制一个字段中具有特定值的元素

时间:2014-09-03 14:02:09

标签: matlab struct structure

正如标题所说,我想只将结构的某些元素复制到一个新元素中,其中所有复制的元素在一个字段中都有一个特定的值。

我有一个现有结构S,其字段为'ID','Direction','Length','Width'。字段Direction可以有两个值:'+'和' - '。我想创建一个带有所有'+'元素的新结构Sp和带有所有' - '元素的Sn。 没有像这样的for循环可能吗?

Sp = struct('ID', '', 'Direction', '', ...);

for ii=1:size(S,1)
   if S(ii).Direction == '+'
      Sp(end+1)=S(ii);
   end
end

最终我需要绘制长度和宽度的直方图,区分+和 - 元素。如果没有额外的结构可以做到这一点,我会感激任何提示!

非常感谢你帮助我!

2 个答案:

答案 0 :(得分:0)

我认为这是你正在寻找的东西:

S = struct('ID', {1, 2, 3, 4}, ...
           'Direction', {'+', '+', '-', '-'}, ...
           'Length', {1, 2, 3, 4}, ...
           'Width', {1, 2, 3, 4});

S([S.Direction] == '+')

S([S.Direction] == '-')

要将这一点扩展到你的直方图问题,你可以这样做:

Sp = S([S.Direction] == '+');
hist([Sp.Length], [Sp.Width]);

或者如果你想在一行中完成所有这些(但是这可能会慢一些,因为它正在进行两次过滤):

hist([S([S.Direction] == '+').Length], [S([S.Direction] == '+').Width]);

答案 1 :(得分:0)

看看这是否适合你 -

%// Get data from structure, S
data = squeeze(struct2cell(S))

%// Get Direction field values
data_Dir = vertcat(data{strcmp(fieldnames(S),'Direction'),:})

%// Separate out Direction field values into two separate structs as asked for
Sp = struct('Direction',data_Dir(data_Dir=='+'))
Sn = struct('Direction',data_Dir(data_Dir=='-'))