2012-08-09 78 views
1

我確實有一個簡單的問題,但它不適合我。 我想預先分配一個包含許多字段的結構。我想要這樣得到它: 結構S 1x30和30個字段中的每一個都應該是一個1x50的結構(一些50個整數,一些帶有字符串的單元,一些子陣列)。這是可能的預先分配它沒有給每個50個領域的確切名稱?如何在matlab中預分配結構

乾杯!

回答

2

AFAIK結構字段必須被命名,但是,這些名稱不需要進行硬編碼。

例如,如果我有一個結構foo,有一個名爲bar場我可以訪問等,使得現場:

name = 'bar'; 
data = foo.(name); % the same as data = getfield(data, name); 

foo.(name)符號表示一個可以從變量字段名(動態字段名)可以找到該文檔here。 此外,您可以使用它來創建字段。

name = 'bar' 
for i = 1:10 
    nameI = [bar, num2str(i)] ; 
    foo.(nameI) = []; % the same as foo = setfield(foo, nameI, []); 
end 

的結構foo現在有一個名爲bar1bar2,... bar10 10場。

如果你絕對不想名字,只是想要指出,那麼你可能想要的是一個單元格數組。單元陣列就像普通的matlab矢量一樣,只是它們可以包含任何東西。

c = {'1234', 1234, [1 2 3 4], [1 2; 3 4], @disp, {1 ,2, 3}}; 

例如c是細胞陣列,其中包含一個字符串,標量,矢量,矩陣,然後功能句柄,和另一單元陣列。

您可以使用大括號{}來訪問單個單元格的內容。所以 c{1}將返回'1234'c{2}將返回一個數字。

您可以使用其中任何一種方法預先分配適合您所描述的數據結構。

+0

所以這意味着我仍然必須輸入一些東西到每個我的50個字段中,沒有方便的方式輸入要預先分配的結構或單元的大小?太可惜了! :) – beginh 2012-08-09 20:31:20

+0

@beginh你可以預先分配一個結構數組。例如's = repmat(struct('bar',[]),50,1);' – slayton 2012-08-09 20:59:32

+0

或者也許這樣,我想到了什麼:我可以創建一個結構,與現有的結構完全相同它的吸引力,細胞的數量等,但只是空的?像s = struct(obj)但是裏面是空的.. – beginh 2012-08-10 09:02:18