2013-01-19 163 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}