單元格陣列

同一個類的元素通常可以連線成陣列(有一些罕見的例外,例如函式控制代碼)。預設情況下,類 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