2012-01-29 77 views
1

我希望能有一个多维的结构数组,但我似乎无法得到所包含元素的字段。或在代码:Matlab:获取单元内部结构的字段,2D结构阵列

mySample = struct('a', zeros(numA),'b', zeros(numB)); 
Data = cells(height,width); 
disp(Data(1,1).a); 

底线失败,并作为

这样的错误“不正确的索引矩阵参考”。

在Matlab中完成的二维数组结构如何?

回答

1

有几个的方法来创建结构的阵列(“结构阵列”或“结构阵列”)。请注意,在结构数组中,每个元素必须具有相同的字段。例如,如果s(1)具有字段“a”和“b”,则s(2)... s(n)必须具有字段“a”和“b”。

% num rows 
n = 10; 
% num cols 
m = 50; 

% method 1, which will repeat a structure 
s = struct('field1', 10, 'field2', 20); 
sArray = repmat(s, n, m); 

% method 2, which initializes each field to empty [] 
sArray(n,m) = struct('field1', [], 'field2', []); 

可以就此展开超越第二维eaisly:

sArray(n,m,p) = struct('field1', [], 'field2', []); 

你也可以预分配数组,并使用一个for循环来设置每个字段的值。此外:

help deal 
help structfun 

您还可以创建结构的单元阵列,其提供更多的灵活性:在单元阵列中的每个结构可具有不同的字段。

c = cell(1,2); 
c{1} = struct('a', 1, 'b', 2); 
c{2} = struct('z', 0, 'q', 5); 
1

结构的2D阵列可以以2种方式来实现:结构的

  1. 细胞阵列 - 异种容器。这意味着每个结构可以不同。

    x = {struct('a',1,'b',2), struct('c',3) ; struct() ; struct('aa',[5 6])}; 
        disp(x{1,2}); 
    
  2. 结构阵列 - 归属容器。这意味着所有结构必须是相同的 - 类型安全。

    x = struct('a',{1 2 3 ; 1 2 3},'b', {4 5 6; 7 8 9 }); 
        disp(x(1,2));