的最好的選擇是使用table()
(或dataset()
如果你的Matlab的版本比2014A舊的,但你必須統計工具箱):
Order = table({'Order 1';'Order 2';'Order 3'},...
{'Trident';'Hershey';'Kitkat'},...
[2; 3; 6],...
[735887; 735875; 735890],...
'VariableNames',{'Name','Item','Quantity','DueDate'})
Order =
Name Item Quantity DueDate
_________ _________ ________ _______
'Order 1' 'Trident' 2 735887
'Order 2' 'Hershey' 3 735875
'Order 3' 'Kitkat' 6 735890
您可以訪問它,你會用結構做但你有更多的優勢,例如訪問和檢查數據更容易,更小的內存佔用等。
什麼你正在試圖建立「手動」是結構數組(讓我強調陣列這裏):
% A structure array
s = struct('Name', {'Order 1';'Order 2';'Order 3'},...
'Item', {'Trident';'Hershey';'Kitkat'},...
'Quantity', {2; 3; 6},...
'DueDate', {735887; 735875; 735890});
s =
3x1 struct array with fields:
Name
Item
Quantity
DueDate
每個標量結構(/單元/記錄/對象/部件稱之爲你怎麼樣)的陣列將具有一組屬性:
s(1)
ans =
Name: 'Order 1'
Item: 'Trident'
Quantity: 2
DueDate: 735887
數據的組織看起來很直觀。但是,如果您想要在整個陣列中應用操作,例如選擇那些有Quantity > 2
,你需要首先連接整個字段到一個臨時數組,然後才應用您的操作,並在最壞的情況下(如果你嵌套字段),你將不得不循環。
我個人更喜歡數據庫/數據集/表方法,其中每個記錄是一行,列是屬性。您可以通過扁平化結構數組爲標結構做到這一點(注意括號):
% A flat structure
s = struct('Name', {{'Order 1';'Order 2';'Order 3'}},...
'Item', {{'Trident';'Hershey';'Kitkat'}},...
'Quantity', [2; 3; 6],...
'DueDate', [735887; 735875; 735890]);
s =
Name: {3x1 cell}
Item: {3x1 cell}
Quantity: [3x1 double]
DueDate: [3x1 double]
即使數據組織簡化版,出現以前那樣直觀,你就能指數直接進入結構(並且將具有較低的內存佔用)。
您正在使用哪個Matlab版本? – Oleg 2014-09-29 14:55:51