Specify Cell Array Inputs at the Command Line
To specify cell array inputs at the command line, use the same methods that you use for other types of inputs. You can:
Provide an example cell array input to the
-argsoption of thefiaccelcommand.Provide a
coder.CellTypeobject to the-argsoption of thefiaccelcommand. To create acoder.CellTypeobject, usecoder.typeof.Use
coder.Constantto specify a constant cell array input.
For code generation, cell arrays are classified as homogeneous
or heterogeneous. See Code Generation for Cell Arrays. When you provide an example cell array
to fiaccel or coder.typeof,
the function determines whether the cell array type is homogeneous
or heterogeneous. If the cell array elements have the same class and
size, coder.typeof returns a homogeneous cell
array type. If the elements have different classes, coder.typeof returns
a heterogeneous cell array type. For some cell arrays, the classification
as homogeneous or heterogeneous is ambiguous. For example, the type
for {1 [2 3]} can be a 1x2 heterogeneous type. The first element is
double and the second element is 1x2 double. The type can also be
a 1x3 homogeneous type in which the elements have class double and
size 1x:2. For these ambiguous cases, coder.typeof uses
heuristics to classify the type as homogeneous or heterogeneous. If
you want a different classification, use the coder.CellType makeHomogeneous or makeHeterogeneous methods.
The makeHomogeneous method makes a homogeneous
copy of a type. The makeHeterogeneous method
makes a heterogeneous copy of a type.
The makeHomogeneous and makeHeterogeneous methods
permanently assign the classification as homogeneous and heterogeneous,
respectively. You cannot later use one of these methods to create
a copy that has a different classification.
Specify Cell Array Inputs by Example
To specify a cell array input by example, provide an example
cell array in the -args option of the fiaccel command.
For example:
To specify a 1x3 cell array whose elements have class double:
fiaccel myfunction -args {{1 2 3}} -report
The input argument is a 1x3 homogeneous cell array whose elements are 1x1 double.
To specify a 1x2 cell array whose first element has class char and whose second element has class double:
fiaccel myfunction -args {{'a', 1}} -report
The input argument is a 1x2 heterogeneous cell array whose first element is 1x1 char and whose second element is 1x1 double.
Specify the Type of the Cell Array Input
To specify the type of a cell array input, use coder.typeof to
create a coder.CellType object. Pass the coder.CellType object
to the -args option of the fiaccel command.
For example:
To specify a 1x3 cell array whose elements have class double:
t = coder.typeof({1 2 3}); fiaccel myfunction -args {t} -reportThe input argument is a 1x3 homogeneous cell array whose elements are 1x1 double.
To specify a 1x2 cell array whose first element has class char and whose second element has class double:
t = coder.typeof({'a', 1}); fiaccel myfunction -args {t}The input argument is a 1x2 heterogeneous cell array whose first element is a 1x1 char and whose second element is a 1x1 double.
You can also use the advanced function coder.newtype to
create a coder.CellType object.
Make a Homogeneous Copy of a Type
If coder.typeof returns a heterogeneous
cell array type, but you want a homogeneous type, use the makeHomogeneous method
to make a homogeneous copy of the type.
The following code creates a heterogeneous type.
t = coder.typeof({1 [2 3]})t =
coder.CellType
1x2 heterogeneous cell
f0: 1x1 double
f1: 1x2 doubleTo make a homogeneous copy of the type, use:
t = makeHomogeneous(t)
t =
coder.CellType
1×2 locked homogeneous cell
base: 1×:2 doubleAlternatively, use this notation:
t = makeHomogeneous(coder.typeof({1 [2 3]}))t =
coder.CellType
1×2 locked homogeneous cell
base: 1×:2 doubleThe classification as homogeneous is locked (permanent). You
cannot later use the makeHeterogeneous method
to make a heterogeneous copy of the type.
If the elements of a type have different classes, such as char
and double, you cannot use makeHomogeneous to
make a homogeneous copy of the type.
Make a Heterogeneous Copy of a Type
If coder.typeof returns a homogeneous cell
array type, but you want a heterogeneous type, use the makeHeterogeneous method
to make a heterogeneous copy of the type.
The following code creates a homogeneous type.
t = coder.typeof({1 2 3})t =
coder.CellType
1x3 homogeneous cell
base: 1x1 doubleTo make the type heterogeneous, use:
t = makeHeterogeneous(t)
t =
coder.CellType
1×3 locked heterogeneous cell
f1: 1×1 double
f2: 1×1 double
f3: 1×1 doubleAlternatively, use this notation:
t = makeHeterogeneous(coder.typeof({1 2 3}))t =
coder.CellType
1×3 locked heterogeneous cell
f1: 1×1 double
f2: 1×1 double
f3: 1×1 doubleThe classification as heterogeneous is locked (permanent). You
cannot later use the makeHomogeneous method to
make a homogeneous copy of the type.
If a type is variable size, you cannot use makeHeterogeneous to
make a heterogeneous copy of it.
Specify Variable-Size Cell Array Inputs
You can specify variable-size cell array inputs in the following ways:
In the
coder.typeofcall.For example, to specify a variable-size cell array whose first dimension is fixed and whose second dimension has an upper bound of 5:
t = coder.typeof({1}, [1 5], [0 1])t = coder.CellType 1x:5 homogeneous cell base: 1x1 doubleFor elements with the same classes, but different sizes, you can the use
coder.typeofsize and variable dimensions arguments to create a variable-size homogeneous cell array type. For example, the following code does not use the size and variable dimensions arguments. This code creates a type for a heterogeneous cell array.t = coder.typeof({1 [2 3]})t = coder.CellType 1x2 heterogeneous cell f0: 1x1 double f1: 1x2 doubleThe following code, that uses the size and dimensions arguments, creates a type for a variable-size homogeneous type cell array:
t = coder.typeof({1 [2 3]}, [1 5], [0 1])t = coder.CellType 1×:5 locked homogeneous cell base: 1×:2 doubleUse
coder.resize.For example, to specify a variable-size cell array whose first dimension is fixed and whose second dimension has an upper bound of 5:
t = coder.typeof({1}); t = coder.resize(t, [1 5], [0,1])t = coder.CellType 1x5 homogeneous cell base: 1x1 doubleYou cannot use
coder.resizewith a heterogeneous cell array type.
Specify Constant Cell Array Inputs
To specify that a cell array input is constant, use the coder.Constant
function with the -args option of the fiaccel command. For
example:
fiaccel myfunction -args {coder.Constant({'red',1,'green',2,'blue',3})} -report
The input is a 1x6 heterogeneous cell array. The sizes and classes of the elements are:
1x3 char
1x1 double
1x5 char
1x1 double
1x4 char
1x1 double
See Also
coder.CellType | coder.typeof | coder.resize | coder.newtype