matlab 結構 struct 陣列

2021-07-09 02:39:02 字數 4309 閱讀 1500

要在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

簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名稱...