2012-01-29 80 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));