Matlab學習3——單元數組與結構體

一,單元數組

clear A % 保證賦值的單元數組名稱不重名
%按單元索引法賦值
A(1,1)={[1 3 5;2 4 6; 1 4 7]};
A(1,2)={3+5i};
A(2,1)={‘Tsinghua in Beijing’};
A(2,2)={0:pi/5:pi};
A
A=[3x3double] [3.0000+5.0000i]
‘Tsinghua in Beijing’ [1x6 double]

%按內容索引法賦值
B{1,1}=[1 2 3;4 5 6;7 8 9];
B{1,2}=2+3i;
B{2,1}=‘Beijing Univ’;
B{2,2}=1:2:13;
B

B= [3x3double] [2.0000+3.0000i]
‘Beijing Univ’ [1x7double]

按單元索引法和按內容索引法所創建的單元是等效的。但需要注意的是,用花括號可以訪問單元數組單元的內容,而圓括號則只用於表示單元數組的單元而不顯示單元數組單元的內容。

二,結構體
1.建立新struct對象不需要事先申明,可以直接引用,而且可以動態擴充。

x.real = 0; % 創建字段名爲real,併爲該字段賦值爲0
x.imag = 0 % 爲x創建一個新的字段imag,併爲該字段賦值爲0
x =
real: 0
imag: 0
2.可以將其動態擴充爲數組:

x(2).real = 0; % 將x擴充爲1×2的結構數組
x(2).imag = 0;
3.在任何需要的時候,也可以爲數組動態擴充字段,如增加字段scale:

x(1).scale = 0;
這樣,所有x都增加了一個scale字段,而x(1)之外的其他變量的scale字段爲空:

x(1) % 查看結構數組的第一個元素的各個字段的內容
ans =
real: 0
imag: 0
scale: 0
x(2) % 查看結構數組的第二個元素的各個字段的內容,注意沒有賦值的字段爲空
ans =
real: 0
imag: 0
scale: []

4.應該注意的是,x的real、imag、scale字段不一定是單個數據元素,它們可以是任意數據類型,可以是向量、數組、矩陣甚至是其他結構變量或元胞數組,而且不同字段之間其數據類型不需要相同。例如:

clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10);
數組中不同元素的同一字段的數據類型也不要求一樣:

x(2).real = ‘123’;
x(2).imag = rand(5,1);
甚至還可以通過引用數組字段來定義結構數據類型的某字段:

x(3).real = x(1); x(3).imag = 3;
x(3)
ans =
real: [1x1 struct]
imag: 34.使用struct函數創建結構使用struct函數也可以創建結構,該函數產生或把其他形式的數據轉換爲結構數組。
struct的使用格式爲:

s = struct(‘field1’,values1,‘field2’,values2,…);
對於struct的賦值用到了元胞數組。數組values1、vales2等可以是元胞數組、標量元胞單元或者單個數值。每個values的數據被賦值給相應的field字段。

當valuesX爲元胞數組的時候,生成的結構數組的維數與元胞數組的維數相同。而在數據中不包含元胞的時候,得到的結構數組的維數是1×1的。例如:

s = struct(‘type’,{‘big’,‘little’},‘color’,{‘blue’,‘red’},‘x’,{3,4})
s =
1x2 struct array with fields:
type
color
x

得到維數爲1×2的結構數組s,包含了type、color和x共3個字段。這是因爲在struct函數中{‘big’,‘little’}、{‘blue’,‘red’}和{3,4}都是1×2的元胞數組,可以看到兩個數據成分分別爲:

s(1,1)
ans =
type: ‘big’
color: ‘blue’
x: 3
s(1,2)
ans =
type: ‘little’
color: ‘red’
x: 4
相應的,如果將struct函數寫成下面的形式:

s = struct(‘type’,{‘big’;‘little’},‘color’,{‘blue’;‘red’},‘x’,{3;4})
s =
2x1 struct array with fields:
type
color
x
則會得到一個2×1的結構數組。

  1. 結構數組的操作
    通過help datatypes獲取數據類型列表,可以看到其中的結構數據類型的有關的函數,主要如下表所示。
通過help datatypes獲取數據類型列表,可以看到其中的結構數據類型的有關的函數,主要如下表所示。
函數名
功能描述
[a,b,c]=deal(A)
將A分別複製給a,b,c
getfield
獲取結構中指定字段的值
setfield
設置結構數組中指定的字段的值
struct2cell
結構數組轉化成元胞數組
isstruct
判斷某變量是否是結構類型
函數名
功能描述
Fieldnames
獲取結構的字段名
Rmfield
刪除結構的字段(不是字段內容)
Struct
創建結構數組
Isfield
判斷是否存在該字段

三,元胞數組
1.定義>>A={‘This is a cel1’,[112,2,3,3],eye(3,4),{‘subcel1’,[1 23]}}
%可以存儲多個不同類型的元素

2.索引>>A{1,3}=[1 2 3]

發佈了17 篇原創文章 · 獲贊 4 · 訪問量 5557
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章