要在maltab中實現比較複雜的程式設計,就不能不用struct型別。而且在matlab中實現struct比c中更為方便。
結構陣列的建立
matlab提供了兩種定義結構的方式:直接應用和使用struct函式。
1. 使用直接引用方式定義結構
與建立數值型陣列一樣,建立新struct物件不需要事先申明,可以直接引用,而且可以動態擴充。比如建立乙個複數變數x:
x.real = 0; % 建立欄位名為real,並為該字段賦值為0
x.imag = 0 % 為x建立乙個新的字段imag,並為該字段賦值為0
x =
real: 0
imag: 0
然後可以將其動態擴充為陣列:
x(2).real = 0; % 將x擴充為1×2的結構陣列
x(2).imag = 0;
在任何需要的時候,也可以為陣列動態擴充字段,如增加欄位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:
應該注意的是,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: 3
下面這個實際的例子直接引用方式定義與顯示結構。
例1: 溫室資料(包括溫室名、容量、溫度、濕度等)的建立與顯示。
(1) 直接對域賦值法產生結構變數
green_house.name = '一號溫室'; % 建立溫室名字段
green_house.volume = '2000立方公尺'; % 建立溫室容量字段
green_house.parameter.temperature = [31.2 30.4 31.6 28.7
29.7 31.1 30.9 29.6]; % 建立溫室溫度字段
green_house.parameter.humidity = [62.1 59.5 57.7 61.5
62.0 61.9 59.2 57.5]; % 建立溫室濕度字段
(2)顯示結構變數的內容
green_house % 顯示結構變數結構
green_house =
name: '一號溫室'
volume: '2000立方公尺'
parameter: [1x1 struct]
green_house.parameter % 用域作用符號. 顯示指定域(parameter)中內容
ans =
temperature: [2x4 double]
humidity: [2x4 double]
green_house.parameter.temperature % 顯示temperature域中的內容
ans =
31.2000 30.4000 31.6000 28.7000
29.7000 31.1000 30.9000 29.6000
例2:在上例的基礎上,建立結構陣列用以儲存乙個溫室群的資料。
green_house(2,3).name = '六號溫室'; %產生2×3結構陣列
green_house % 顯示結構陣列的結構
green_house =
2x3 struct array with fields:
name
volume
parameter
green_house(2,3) % 顯示結構陣列元素的結構
ans =
name: '六號溫室'
volume:
parameter:
2. 使用struct函式建立結構
使用struct函式也可以建立結構,該函式產生或吧其他形式的資料轉換為結構陣列。
struct的使用格式為:
s = sturct('field1',values1,'field2',values2,…);
該函式將生成乙個具有指定欄位名和相應資料的結構陣列,其包含的資料values1、valuese2等必須為具有相同維數的資料,資料的存放位置域其他結構位置一一對應的。對於struct的賦值用到了元胞陣列。陣列values1、values2等可以是元胞陣列、標量元胞單元或者單個數值。每個values的資料被賦值給相應的field欄位。
當valuesx為元胞陣列的時候,生成的結構陣列的維數與元胞陣列的維數相同。而在資料中不包含元胞的時候,得到的結構陣列的維數是1×1的。例如:
s = struct('type',,'color',,'x',)
s =
1x2 struct array with fields:
type
color
x 得到維數為1×2的結構陣列s,包含了type、color和x共3個字段。這是因為在struct函式中、和都是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',,'color',,'x',)
s =
2x1 struct array with fields:
type
color
x 則會得到乙個2×1的結構陣列。
下面給出利用struct構建結構陣列的具體例項。
例:利用函式struct,建立溫室群的資料庫。
(1) struct預建立空結構陣列方法之一
a = cell(2,3); % 建立2×3的元胞陣列
green_house_1=struct('name',a,'volume',a,'parameter',a(1,2))
green_house_1 =
2x3 struct array with fields:
name
volume
parameter
(2)struct預建空結構陣列方法之二
green_house_2=struct('name',a,'volume',,'parameter',)
green_house_2 =
2x3 struct array with fields:
name
volume
parameter
(3)struct預建空結構陣列方法之三
green_hopuse_3(2,3)=struct('name',,'volume',,'parameter',)
green_hopuse_3 =
2x3 struct array with fields:
name
volume
parameter
(4)struct建立結構陣列方法之四
a1=;a2=;
green_house_4(2,3)=struct('name',a1,'volume',a2,'parameter',);
t6=[31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6]; green_house_4(2,3).parameter.temperature=t6;
green_house_4
ans =
2x3 struct array with fields:
name
volume
parameter
matlab中struct結構體如何排序
首先我的結構體資料是這個樣子的 第一步按照id,也就是字串對結構體資料進行排序 a importdata location b,index sort a.textdata 得到的index就是我們後面矩陣元素需要排序的順序 m a.data 從a中提取出來data資料集 m m index,按照te...
Matlab訪問struct中資料
這幾天在用matlab,做深度學習,一直想訪問struct中的資料,但是每次都是只能訪問到乙個,有些苦悶。在網上搜了一圈,也沒有發現,後來在官網上發現了乙個方法,看來,matlab的文件還是很可靠的。特此在這裡mark一下。建立乙個 1 3 的結構體 s,其中包含字段 f s 1 f 1 s 2 f...
什麼結構體 struct
簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名稱...