# MATLAB Language Getting started with MATLAB Language Cell arrays

## Example

Elements of the same class can often be concatenated into arrays (with a few rare exceptions, e.g. function handles). Numeric scalars, by default of class `double`, can be stored in a matrix.

``````>> 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
``````

Characters, which are of class `char` in MATLAB, can also be stored in array using similar syntax. Such an array is similar to a string in many other programming languages.

``````>> s = ['MATLAB ','is ','fun']
s =
MATLAB is fun
``````

Note that despite both of them are using brackets `[` and `]`, the result classes are different. Therefore the operations that can be done on them are also different.

``````>> whos
Name      Size            Bytes  Class     Attributes

A         2x5                80  double
s         1x13               26  char
``````

In fact, the array `s` is not an array of the strings `'MATLAB '`,`'is '`, and `'fun'`, it is just one string - an array of 13 characters. You would get the same results if it were defined by any of the following:

``````>> s = ['MAT','LAB ','is f','u','n'];
>> s = ['M','A','T','L','A','B,' ','i','s',' ','f','u','n'];
``````

A regular MATLAB vector does not let you store a mix of variables of different classes, or a few different strings. This is where the `cell` array comes in handy. This is an array of cells that each can contain some MATLAB object, whose class can be different in every cell if needed. Use curly braces `{` and `}` around the elements to store in a cell array.

``````>> C = {A; s}
C =
[2x5 double]
'MATLAB is fun'
>> whos C
Name      Size            Bytes  Class    Attributes

C         2x1               330  cell
``````

Standard MATLAB objects of any classes can be stored together in a cell array. Note that cell arrays require more memory to store their contents.

Accessing the contents of a cell is done using curly braces `{` and `}`.

``````>> C{1}
ans =
1.0e+04 *
0.0001   -0.0002    0.0003    0.0001    1.5625
0.0003       Inf       Inf       NaN      -Inf
``````

Note that `C(1)` is different from `C{1}`. Whereas the latter returns the cell's content (and has class `double` in out example), the former returns a cell array which is a sub-array of `C`. Similarly, if `D` were an 10 by 5 cell array, then `D(4:8,1:3)` would return a sub-array of `D` whose size is 5 by 3 and whose class is `cell`. And the syntax `C{1:2}` does not have a single returned object, but rater it returns 2 different objects (similar to a MATLAB function with multiple return values):

``````>> [x,y] = C{1:2}
x =
1                        -2                      3.14                       0.8                     15625
3.14159265358979                       Inf                       Inf                       NaN                      -Inf
y =
MATLAB is fun
``````