單元格陣列
同一個類的元素通常可以連線成陣列(有一些罕見的例外,例如函式控制代碼)。預設情況下,類 double
的數字標量可以儲存在矩陣中。
>> A = [1, -2, 3.14, 4/5, 5^6; pi, inf, 7/0, nan, log(0)]
A =
1.0e+04 *
0.0001 -0.0002 0.0003 0.0001 1.5625
0.0003 Inf Inf NaN -Inf
在 MATLAB 中屬於 char
類的字元也可以使用類似的語法儲存在陣列中。這樣的陣列類似於許多其他程式語言中的字串。
>> s = ['MATLAB ','is ','fun']
s =
MATLAB is fun
請注意,儘管它們都使用括號 [
和 ]
,但結果類別不同。因此,可以對它們進行的操作也是不同的。
>> whos
Name Size Bytes Class Attributes
A 2x5 80 double
s 1x13 26 char
實際上,陣列 s
不是字串'MATLAB '
,'is '
和'fun'
的陣列,它只是一個字串 - 一個包含 13 個字元的陣列。如果由以下任何一項定義,你將得到相同的結果:
>> s = ['MAT','LAB ','is f','u','n'];
>> s = ['M','A','T','L','A','B,' ','i','s',' ','f','u','n'];
常規的 MATLAB 向量不允許儲存不同類或幾個不同字串的變數混合。這就是 cell
陣列派上用場的地方。這是一個單元格陣列,每個單元格都可以包含一些 MATLAB 物件,如果需要,它們的類在每個單元格中都可以不同。在元素周圍使用花括號 {
和 }
儲存在單元格陣列中。
>> C = {A; s}
C =
[2x5 double]
'MATLAB is fun'
>> whos C
Name Size Bytes Class Attributes
C 2x1 330 cell
任何類的標準 MATLAB 物件可以一起儲存在單元陣列中。請注意,單元陣列需要更多記憶體來儲存其內容。
使用花括號 {
和 }
來訪問單元格的內容。
>> C{1}
ans =
1.0e+04 *
0.0001 -0.0002 0.0003 0.0001 1.5625
0.0003 Inf Inf NaN -Inf
請注意,C(1)
與 C{1}
不同。雖然後者返回單元格的內容(並且在示例中具有類 double
),但前者返回一個單元格陣列,該陣列是 C
的子陣列。類似地,如果 D
是一個 10 乘 5 的單元陣列,那麼 D(4:8,1:3)
將返回一個 D
的子陣列,其大小為 5 乘 3,其類別為 cell
。語法 C{1:2}
沒有單個返回的物件,但是 rater 返回 2 個不同的物件(類似於具有多個返回值的 MATLAB 函式):
>> [x,y] = C{1:2}
x =
1 -2 3.14 0.8 15625
3.14159265358979 Inf Inf NaN -Inf
y =
MATLAB is fun