matlab 元胞呼叫方法你真的理解了麼?

2021-10-01 15:37:35 字數 1722 閱讀 4157

元胞在引用時,{}和()到底有什麼區別?

注意:大括號用於表示元胞的內容,小括號表示指定的元胞物件。

舉例說明這句話的意思

r=}

r = 1×2 cell 陣列

>> r %輸出的是元胞內容

ans =

1>> r

ans =

1×2 cell 陣列 % 輸出的是元胞陣列,且每個元素都是元胞

>> r(1)

ans =

1×1 cell 陣列

>> s=r(1)

s = 1×1 cell 陣列 %仍舊是元胞物件 s是cell型別

>> m=r(1,2)

m = 1×1 cell 陣列 %元胞物件

>> n=r %元胞內容 n是double型別

n = 2

>> q=n*2

q = 4

>> o=s*2

未定義與 'cell' 型別的輸入引數相對應的運算子 '*'。

>>

當我們儲存函式控制代碼的時候,呼叫函式時仍舊是***呼叫的函式內容,而非物件***:

r=,}

r = 1×2 cell 陣列

k>> r(1)

ans =

1×1 cell 陣列 % 表示這個元胞物件

%有兩個要素

k>> r

ans =

1×2 cell 陣列 %第乙個元胞元素中的內容

k>> r(1)

ans =

1×1 cell 陣列 %第乙個元胞中第乙個元素物件

當函式呼叫時仍舊同理:

>> r=,}

r = 1×2 cell 陣列

>> r

ans =

包含以下值的 function_handle:

@objfun

>> r(1)

ans =

1×1 cell 陣列

但是如何函式有引數,怎麼辦呢?

r=struct('initfun', });

uu=r.initfun(1,2,3); %呼叫der ,並假設三個函式均有有三個引數

uu=r.initfun(1,2,3); %呼叫rr

% ②

r=struct('initfun', ); %錯誤寫法

%③r=struct('initfun', ,}); %錯誤寫法

後邊兩種寫法為什麼不對呢?

第二種寫法的意思時initfun對應著乙個元胞,但結構體中name和value是一一對應的,initfun對應了三個值,顯然是不合理的;但是r是1*3的結構體陣列,有三個值,每個值都是乙個inifun的屬性物件,選擇其中的任乙個與inifun對應就好了,因此可以寫成

r(1).initfun(1,2,3)
但這樣的寫法是不是很怪,相當於initfun屬性有三個物件,分別是r(1),r(2),r(3)

第三種寫法同第二種方法,相當於和是兩個initfun物件,若呼叫則需寫成

r(1).initfun  %內容是@der
r=struct('initfun', });

r.initfun(1,2,3) % 呼叫

MATLAB元胞陣列

元胞陣列是matlab的一種特殊資料型別,可以將元胞陣列看做一種無所不包的通用矩陣,或者叫做廣義矩陣。組成元胞陣列的元素可以是任何一種資料型別的常數或者常量,每乙個元素也可以具有不同的尺寸和記憶體占用空間,每乙個元素的內容也可以完全不同,所以元胞陣列的元素叫做元胞 cell 和一般的數值矩陣一樣,元...

matlab胞元陣列

今天敲matlab 的時候,用bwboundaries函式來提取影象邊界的 中出現了d b這句 這句 的意思是將邊影象中第乙個物件的所有邊界座標提取出來 覺得這種表達形式很有意思,查了查資料是元胞陣列的利用。元胞陣列裡面可以是任意結構的陣列 任意大小,任意型別 是一種很方便的結構,這樣你就可以把亂七...

Matlab中的元胞陣列

元胞陣列 cell array 將型別不同的相關資料整合到乙個單一的變數中,使得大量相關資料的引用和處理變得簡單方便。也就是說cell元胞陣列,儲存不同型別的資料。建立方法有3種 直接賦值法 利用函式cell 利用直接建立元胞陣列的所有單元。通過賦值語句把值賦到元胞陣列的乙個單元中,但每一次賦值只能...