關於Matlab下的cell元胞與struct結構體
阿新 • • 發佈:2019-02-03
結構體資料型別可以把不同資料型別的變數放到同一個變數名下,通過不同“域”的概念對結構體中的不同資料進行賦值‘操作。結構體中的資料儲存在相應的“域”中。
結構體的建立主要通過命令列直接賦值法和函式法。
1. 命令列直接賦值法
>>s.str='ABC';
>>s.num='[1:7];
>>s.mat=magic(3);
2 函式法
s=struct('str','ABC','num',[1:7],'mat',magic(3))
元胞陣列是由可以包括任何資料型別的元胞組成的陣列。通過元胞陣列的使用,可以在同一個變數中儲存不同資料型別的資料。
元胞陣列的建立方法主要有直接賦值法和函式法。
1. 直接賦值法
>>a{1,1}=7;
>>a{1,2}='ABC';
>>a{2,1}=magic(3);
>>a{2,2}=logical(ones(3));
2. 函式法
>>a=cell(m,n);
>>a={7;'ABC';magic(3);logical(ones(3))}
元胞cell與結構體struct相互賦值之間為了型別一致,有時需要cell2struct或struct2cell,或對元胞的元胞或結構體的結構體需要用cellfun或structfun。但只要在賦值時正確使用()和{}便不需要使用這些函式進行轉換。如下所示:
metric_dist={};
for i=1:length(dist.label)
metric_dist{i}.label=dist.label(i);
metric_dist{i}.ind=dist.ind(i);
metric_dist{i}.name=dist.name(i);
end
p_distance=metric_dist;
得到的p_distance如下:
現把程式碼只作()或{}修改如下:
metric_dist={}; for i=1:length(dist.label) metric_dist(i).label=dist.label(i); metric_dist(i).ind=dist.ind(i); metric_dist(i).name=dist.name(i); end p_distance=metric_dist;
此時,p_distance變成了結構體,如下所示:
現把程式碼再修改為如下:
metric_dist={};
for i=1:length(dist.label)
metric_dist{i}.label=dist.label{i};
metric_dist{i}.ind=dist.ind{i};
metric_dist{i}.name=dist.name{i};
end
p_distance=metric_dist;
此時,p_distance也是結構體:
這裡看上去和第一段程式碼結果一樣,但具體到結構體記憶體儲的內容,還是有差別的,這只是元胞cell對()取元胞單元,對{}取元胞內容的差別。