我確實有一個簡單的問題,但它不適合我。 我想預先分配一個包含許多字段的結構。我想要這樣得到它: 結構S 1x30和30個字段中的每一個都應該是一個1x50的結構(一些50個整數,一些帶有字符串的單元,一些子陣列)。這是可能的預先分配它沒有給每個50個領域的確切名稱?如何在matlab中預分配結構
乾杯!
我確實有一個簡單的問題,但它不適合我。 我想預先分配一個包含許多字段的結構。我想要這樣得到它: 結構S 1x30和30個字段中的每一個都應該是一個1x50的結構(一些50個整數,一些帶有字符串的單元,一些子陣列)。這是可能的預先分配它沒有給每個50個領域的確切名稱?如何在matlab中預分配結構
乾杯!
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
現在有一個名爲bar1
,bar2
,... bar10
10場。
如果你絕對不想名字,只是想要指出,那麼你可能想要的是一個單元格數組。單元陣列就像普通的matlab矢量一樣,只是它們可以包含任何東西。
c = {'1234', 1234, [1 2 3 4], [1 2; 3 4], @disp, {1 ,2, 3}};
例如c
是細胞陣列,其中包含一個字符串,標量,矢量,矩陣,然後功能句柄,和另一單元陣列。
您可以使用大括號{}
來訪問單個單元格的內容。所以 c{1}
將返回'1234'
而c{2}
將返回一個數字。
您可以使用其中任何一種方法預先分配適合您所描述的數據結構。
所以這意味着我仍然必須輸入一些東西到每個我的50個字段中,沒有方便的方式輸入要預先分配的結構或單元的大小?太可惜了! :) – beginh 2012-08-09 20:31:20
@beginh你可以預先分配一個結構數組。例如's = repmat(struct('bar',[]),50,1);' – slayton 2012-08-09 20:59:32
或者也許這樣,我想到了什麼:我可以創建一個結構,與現有的結構完全相同它的吸引力,細胞的數量等,但只是空的?像s = struct(obj)但是裏面是空的.. – beginh 2012-08-10 09:02:18