Matlab基礎之單元陣列和結構陣列

2021-07-23 09:11:11 字數 4243 閱讀 2763

前言:

單元陣列和結構陣列是一種新的資料型別,能將不同型別、不同維數的陣列組合在一起,從而方便對不同的資料型別方便管理和維護。

如上圖所示的2*2矩陣中,分別儲存著四種不同的資料型別,分別為陣列、字串、空矩陣、複數矩陣。

在單元陣列中,通過單元陣列的名字是不能訪問相應的元素,只能訪問對應的索引號,因為單元陣列中儲存的是指向某種資料結構的指標。

建立並賦值:

1.賦值語句建立:分為內容建立和單元索引建立

內容建立:乙個乙個元素進行建立,用大括號

c=[1 2;3 4];

c=[1 2;3 4;2 14];

c=;c='i love a pig';

b=c(2,2);

d=c;cb

d%%%%%%

result:

c =

[2x2 double] [3x2 double]

'i love a pig'

b =

'i love a pig'

d = i love a pig

單元索引建立:乙個乙個單元進行建立,用小括號

c(1,1)=;

c(1,2)=;

c(2,1)=;

c(2,2)=;

b=c(2,2);

d=c;cb

d%%%%%%

result:

c =

[2x2 double] [3x2 double]

'i love a pig'

b =

'i love a pig'

d = i love a pig

注意:單元矩陣與普通矩陣名字不能相同,否則偶同矩陣覆蓋單元矩陣。

2.cell()函式建立:

>> b=cell(2,3)

b = 

對它賦值如上面的方法,分內容和單元建立兩種方法。

3.用大括號直接建立並賦值:

如3*4的單元矩陣

>> b=

b = 

[2x2 double]    'you are a pig'        [3x1 double]

[2x2 double]    'you are a pig'        [3x1 double]

[2x2 double]    'you are a pig'        [3x1 double]

總結:第三種建立方法最簡單和方便!

4.如何顯示

上面的方法也介紹如何顯示單元陣列,但只能顯示其中乙個元素。

1)用celldisp()函式能全部整體顯示單元陣列的細節內容。

2)用cellplot()函式以圖形方式展現:

c=[1 2;3 4];

c=[1 2;3 4;2 14];

c=;c='i love a pig';

cellplot(c)

結果如圖:2*2的單元矩陣,紅色表示占用記憶體,白色相反,字串最後怎麼沒開闢記憶體?

引入結構陣列原因:普通資料和單元陣列只能通過下標訪問陣列元素,而結構陣列是元素帶名字的,也可以儲存不同型別的元素,元素被稱為域,陣列名.網域名稱可以訪問結構陣列的具體元素值。

1.建立

賦值語句建立:

student(1).name='bob';

student(1).***='man';

student(1).age='25';

student(1).score=[98 99 100];

student(2).name='plimmer';

student(2).***='man';

student(2).age='12';

student(2).score=[98 9 100];

student(3).name='liky';

student(3).***='girl';

student(3).score=[98 99 97];

比如:執行student(2).age  返回 ans =12;

執行student(3).age  返回 ans=;

執行student(2)   返回

ans = 

name: 'plimmer'

***: 'man'

age: '12'

score: [98 9 100]

struct()函式建立:

幫助文件的定義:s = struct(field1,value1,...,fieldn,valuen)=sstruct(網域名稱,值,網域名稱,值,

網域名稱,值,。。。。),上面的用

struct()來實現:

>> student(1)=struct('name','bob','***','man','age',25,'score',[98 99 100]);

student(2)=struct('name','plimmer','***','man','age',12,'score',[98 9 100]);

student(3)=struct('name','liky','***','girl','age','','score',[98 99 97]);

%operate:

>> student(2).name%訪問陣列名student(2)的網域名稱name

ans =

plimmer

>>student(2).hobby='music'%增加網域名稱hobby

student =

1x3 struct array with fields:

name

***age

score

hobby

>> student(1)%訪問陣列名student(1)

ans =

name: 'bob'

***: 'man'

age: 25

score: [98 99 100]

hobby:

用rmfield()函式去刪除結構陣列裡的網域名稱。

s = rmfield(s,field)

removes the specified field or fields from structure array s.

>> student(1)=struct('name','bob','***','man','age',25,'score',[98 99 100]);

student(2)=struct('name','plimmer','***','man','age',12,'score',[98 9 100]);

student(3)=struct('name','liky','***','girl','age','','score',[98 99 97]);

%operate:

>> student=rmfield(student,'age')%一次只能刪除乙個網域名稱

student =

1x3 struct array with fields:

name

***score

>> student%驗證

student =

1x3 struct array with fields:

name

***score

>> fields=;%一次能刪除多個網域名稱

student= rmfield(student,fields)

student =

1x3 struct array with fields:

name

>> student%驗證

student =

1x3 struct array with fields:

name

注:還有好多函式對結構陣列進行操作,太多了,不寫上面了碰到再說吧

MATLAB函式控制代碼 單元陣列和結構

函式控制代碼 單元陣列和結構 函式控制代碼 包含有引用函式時所有的資訊,優點 將函式控制代碼作為呼叫中的參量傳遞到另乙個函式 可以儲存到資料結構或檔案中 函式控制代碼運算子 有兩種函式控制代碼 1 命名函式控制代碼 建立例如 f sin 呼叫例如 f pi 4 或者 sin pi 4 2 匿名函式控...

matlab單元陣列 結構陣列學習記錄

結構陣列 應該是上週總結的,忘了 單元陣列 cell array 即每個元素為乙個單元的陣列。每個單元可以包含任意資料型別的陣列。例如,單元陣列的乙個單元可以是乙個實數矩陣,或是乙個字串陣列,也可以是乙個復向量陣列。用類似矩陣的記號將複雜的資料結構納入乙個變數之下。和矩陣中的圓括號表示下標類似,單元...

matlab學習筆記 一)單元陣列

matlab學習筆記 一 單元陣列 1.floor x 取最小的整數 floor 3.18 3,floor 3.98 3 ceil x 取最大的整數 ceil 3.18 4,ceil 3.18 4 2.單元陣列和結構體作用差不多,相同點 都是存放不同型別的資料,能實現不同型別資料的儲存機制。不同點 ...