【问题标题】:Extract a single struct from a Matlab struct of arrays从数组的 Matlab 结构中提取单个结构
【发布时间】:2011-12-11 21:29:33
【问题描述】:

假设我得到一个数组结构,例如:

s = 

foo: [3x3 double]
bar: [3x1 double]

是否有一种简单的方法来提取具有与s 相同的字段名称并且每个字段由s 中同一字段的ixth 行填充的结构?我可以假设每个字段都有相同的行数。鉴于上述情况,我可以这样做

ix = 1;
s1.foo = s.foo(ix, :);
s1.bar = s.bar(ix, :);

但如果 s 有多个字段,这将变得笨拙。有没有一个功能可以做同样的事情,比如s1 = extractstruct(s, ix)

【问题讨论】:

  • 其实有一个函数fieldfun会很甜蜜
  • @Oli,试试structfun

标签: matlab struct


【解决方案1】:

它不像s1 = extractstruct(s, ix)那么短,但我会这样做:

s.foo = rand(3);
s.bar = rand(1,3);
xi=1;

s2=reshape([fieldnames(s)'; cellfun(@(x) x(xi,:),struct2cell(s)','UniformOutput',0)],1,[]);
s2=struct(s2{:})


s2 = 

    foo: [0.8147 0.9134 0.2785]
    bar: [0.7922 0.9595 0.6557]

【讨论】:

  • 应该 'Un)],1,[]iformOutput' 是 'UniformOutput' 吗?
  • 另外,正是我的问题,它应该是s.bar = rand(3,1),以便它具有相同的行数。 /挑剔
  • 使用cell2struct而不是struct会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
相关资源
最近更新 更多