2011-12-11 111 views
1

想我給數組結構,如:從陣列的Matlab的結構提取單個結構

s = 

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

有一種簡單的方法來提取具有相同字段名稱結構作爲s,並與每個字段由s中相同字段的第ix行填充?我可以假定每個字段都有相同的行數。鑑於上述,我可以做

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

但是,如果s有多個字段,這將變得笨拙。有沒有一個功能可以做到等價,la s1 = extractstruct(s, ix)

+0

事實上,這將是甜的有一個函數'fieldfun' – Oli

+0

@Oli,試試['structfun'](HTTP ://www.mathworks.co.uk/help/techdoc/ref/structfun.html) – Nzbuu

回答

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] 
+0

應該'Un)],1,[] iformOutput'是'UniformOutput'? – dantswain

+0

正確...我的複製粘貼失敗,我不知道爲什麼....我編輯它。 – Oli

+0

另外,正是我的問題,它應該是's.bar = rand(3,1)',以便它具有相同的行數。/nitpicky – dantswain