2013-01-19 192 views
1

我有一個結構矩陣。我試圖從矩陣中提取一個相同大小的矩陣 ,其中只有一個字段爲值。從結構矩陣中提取數據矩陣

我一直在試圖使用struct2cell和類似的功能沒有成功。 這怎麼辦?

+0

你能在這裏添加一些代碼嗎? –

+0

@SamehKamal喬納斯代碼示例就是我的意思:)謝謝。 –

+0

我已經將項目上傳到git: https://github.com/guywald/allele_fixation –

回答

1

如果我理解正確的話,你有struct例如像數組中此

s(1:2,1:3) = struct('a',1,'b',2); 

現在你想有一個不同的結構,只有擁有該領域b

[newS(1:2,1:3).b] = deal(s.b); 

編輯

如果你所需要的只是輸出(如果字段值是標量),你可以做foll欠款:

out = zeros(size(s)); 
out(:) = cat(1,s.b) 
+0

酷:)這看起來不錯,但我想要最終的解決方案只是一個常規矩陣的值,而不是一個結構。 –

+0

@Guy:好的,你去了 – Jonas

+0

謝謝!奇蹟般有效 :) –

1

我會借Jonas的例子。您可以使用[]來收集特定字段。

% Create structure array 
s(1:2,1:3) = struct('a',1,'b',2); 

% Change values 
for idx = 1:prod(size(s)) 
    s(idx).a = idx; 
    s(idx).b = idx^2; 
end 

% Gather a specific field and reshape it to the size of the original matrix 
A = reshape([s.a],size(s)); 
B = reshape([s.b],size(s)); 
0

我也有類似的問題,但該領域的在我的結構數組的內容被改變,我使用標記我的數據長度字符串,所以當我提取字段的內容,我想的小區變長的字符串。

該代碼使用getfieldarrayfun來完成這項工作,但我認爲它比需要更復雜。

sa = struct('name', {'ben' 'frank', 'betty', 'cybil', 'jack'}, 'value', {1 1 2 3 5}) 
names = arrayfun(@(x) getfield(x, 'name'), sa, 'UniformOutput', false) 

任何人都可以提出更清潔的替代品嗎?在映射工具箱中的extractfield似乎做了這項工作,但它不是基礎MATLAB系統的一部分。

更新:我已經回答了我自己的嵌入問題。

names = {sa.name}