Code Generation for dlarray
R2026bA deep learning array stores data with optional data format labels for custom training loops, and enables functions to compute and use derivatives through automatic differentiation. To learn more about custom training loops, automatic differentiation, and deep learning arrays, see Custom Training Using Automatic Differentiation (Deep Learning Toolbox).
Code generation supports both formatted and unformatted dlarray (Deep Learning Toolbox) objects
as inputs to the predict (Deep Learning Toolbox) method of
dlnetwork objects. dlarray objects containing
gpuArrays are also supported for code generation. To generate C/C++
code using deep learning arrays, you need to install MATLAB Coder Interface for Deep Learning. For generating and deploying
CUDA® code onto NVIDIA® GPUs, you need to install GPU Coder Interface for Deep Learning.
Note
You can pass numeric inputs directly to the
predict function without creating a
dlarray object. This approach simplifies integration with
standalone code generation workflows, improves performance for MEX workflows, and
allows you to pass numeric signals directly to MATLAB Function blocks
in Simulink® without converting them to dlarray objects. For more
information, see Generate Generic C/C++ Code for Deep Learning Networks. (since R2026b)
Define dlarray for Code Generation
For code generation, use the dlarray (Deep Learning Toolbox)
function to create deep learning arrays. For example, suppose you have a pretrained
dlnetwork (Deep Learning Toolbox) network object in the
mynet.mat MAT file. To predict the responses for this network,
create an entry-point function in MATLAB®.
There are two possible entry-point designs:
Design 1 (Recommended)
In this design example, the input and output of foo are of
primitive datatypes and a formatted dlarray object is created
within the function. The extractdata (Deep Learning Toolbox) method of the dlarray object returns
the data in the dlarray
dlA as the output of foo. The output
a has the same data type as the underlying data type in
dlA.
In this design, dimension labels are specified by creating a formatted
dlarray object within the entry-point function.
function a = foo(in) dlIn = dlarray(in, "SSC"); persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork("mynet.mat"); end dlA = predict(dlnet, dlIn); a = extractdata(dlA); end
You can also simplify this workflow by using
an unformatted dlarray object. (since R2026b)
function out = foo(in) persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork("mynet.mat"); end dlIn = dlarray(in); dlOut = predict(dlnet, dlIn); out = extractdata(dlOut); end
To see an example of dlnetwork and
dlarray usage with MATLAB
Coder™, see Generate Digit Images Using Variational Autoencoder on Intel CPUs.
Design 2 (Not Recommended)
In this design example, the input and output of the entry-point function
foo are of dlarray type. This design is not
recommended for code generation for these reasons:
In Simulink,
dlarrayobjects cannot propagate through signals in a MATLAB Function block.The code generator maps the
dlarraydata type to a struct or class rather than a native type such asfloat. To interface with the generated entry-point function, you must instantiate the struct or class and copy inputs to its members.
function dlOut = foo(dlIn) persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork("mynet.mat"); end dlOut = predict(dlnet, dlIn); end
Generate code for complex-valued dlarray objects
Code generation supports complex number functions with dlarray
objects. You can pass complex-valued inputs to dlarray-supported
complex number functions and generate C/C++ and CUDA code that does not depend on
third-party libraries. You can implement the complex-valued dlarray
support functionality in Simulink by using a MATLAB Function
Block.
Code generation does not support passing complex-valued input to the
predict method of dlnetwork object. For code
generation, the dlarray input to the predict method
of the dlnetwork object must be single data
type.
You cannot pass a complex-valued input to a MEX function if the input is specified as real during code generation time. For more usage notes and limitations of code generation support for complex data, see Code Generation for Complex Data
Using Variable-Size dlarray
You can generate code for MATLAB code that uses variable-size dlarray objects.
For example, define this MATLAB design file:
function out = fooAdd(in1,in2) %#codegen dlIn1_1 = dlarray(in1); dlIn1_2 = dlarray(in2); out = dlIn1_1 + dlIn1_2; end
Specify the two inputs in1 and in2 to be
unbounded two-dimensional arrays of single type. Create the
appropriate code configuration object cfg to generate generic C MEX
code for fooAdd. Generate MEX code and run the generated MEX.
t_in1 = coder.typeof(single(1),[inf inf],[1 1]); t_in2 = coder.typeof(single(1),[inf inf],[1 1]); codegen fooAdd -args {t_in1,t_in2} -report out = fooAdd_mex(single(eye(4,4)),single(ones(4,1)));
When generating code for variable-size dlarray objects, adhere to
these restrictions:
The
Udimension of adlarrayobject must be of fixed size.For operations between a
dlarrayobject and a numeric array that might implicitly expand either operands, do not combine a fixed sizeUdimension of thedlarrayobject with a variable-size dimension of the numeric array.For unary operations such as
max,min, andmeanon a variable-sizedlarrayobject, specify the intended working dimension explicitly as a constant value. See Incompatibility with MATLAB for Default Dimension Selection.
dlarray Object Functions with Code Generation Support
For code generation, you are restricted to the deep learning array object functions listed in this table. For more information of usage notes and limitations, see the extended capabilities section on the reference page.
| Dimension labels for |
| Extract data from |
| Find dimensions with specified label |
| Remove |
Deep Learning Toolbox Functions with dlarray Code Generation Support
Deep Learning Operations
| Function | Description |
|---|---|
avgpool (Deep Learning Toolbox) | The average pooling operation performs downsampling by dividing the input into pooling regions and computing the average value of each region. |
batchnorm (Deep Learning Toolbox) | The batch normalization operation normalizes the input data
across all observations for each channel independently. To speed up
training of the convolutional neural network and reduce the
sensitivity to network initialization, use batch normalization
between convolution and nonlinear operations such as relu (Deep Learning Toolbox). |
dlconv (Deep Learning Toolbox) | The convolution operation applies sliding filters to the input
data. Use the dlconv (Deep Learning Toolbox) function for deep learning convolution,
grouped convolution, and channel-wise separable convolution.
|
fullyconnect (Deep Learning Toolbox) | The fully connect operation multiplies the input by a weight matrix and then adds a bias vector. |
gelu (Deep Learning Toolbox) (since R2026a) | The Gaussian error linear unit (GELU) activation operation weights the input by its probability under a Gaussian distribution. |
groupnorm (Deep Learning Toolbox) | The group normalization operation normalizes the input data across grouped subsets of channels for each observation independently. |
instancenorm (Deep Learning Toolbox) | The instance normalization operation normalizes the input data across each channel for each observation independently. |
layernorm (Deep Learning Toolbox) | The layer normalization operation normalizes the input data across all channels for each observation independently. |
leakyrelu (Deep Learning Toolbox) | The leaky rectified linear unit (ReLU) activation operation performs a nonlinear threshold operation, where any input value less than zero is multiplied by a fixed scale factor. |
lstm (Deep Learning Toolbox) (since R2026b) | The long short-term memory (LSTM) operation allows a network to learn long-term dependencies between time steps in time series and sequence data. |
maxpool (Deep Learning Toolbox) | The maximum pooling operation performs downsampling by dividing the input into pooling regions and computing the maximum value of each region. |
relu (Deep Learning Toolbox) | The rectified linear unit (ReLU) activation operation performs a nonlinear threshold operation, where any input value less than zero is set to zero. |
sigmoid (Deep Learning Toolbox) | The sigmoid activation operation applies the sigmoid function to the input data. |
softmax (Deep Learning Toolbox) | The softmax activation operation applies the softmax function to the channel dimension of the input data. |
Domain-Specific Functions with dlarray Support
Signal Processing
| Function | Description |
|---|---|
dlcwt (Wavelet Toolbox) (since R2026a) | Compute continuous wavelet transform. |
dlicwt (Wavelet Toolbox) (since R2026a) | Compute inverse continuous wavelet transform. |
dldwt (Wavelet Toolbox) (since R2026b) | Compute 1-D and 2-D forward discrete wavelet transforms. |
dlidwt (Wavelet Toolbox) (since R2026b) | Compute 1-D and 2-D inverse discrete wavelet transforms. |
dlmodwt (Wavelet Toolbox) (since R2025a) | Compute maximal overlap discrete wavelet transform and multiresolution analysis. |
dlstft (Signal Processing Toolbox) (since R2025a) | Compute short-time Fourier transform. |
dlistft (Signal Processing Toolbox) (since R2025a) | Compute inverse short-time Fourier transform. |
Wireless Communications
| Function | Description |
|---|---|
awgn (Communications Toolbox) | Filter a signal represented in a dlarray object
through an additive white Gaussian noise (AWGN) channel. |
bit2int (Communications Toolbox) | Convert input bits represented in a dlarray object
to integers. |
genqammod (Communications Toolbox) | Modulate a signal represented in a dlarray object
using general quadrature amplitude modulation (QAM). |
ofdmChannelResponse (Communications Toolbox) | Calculate the frequency response of a time-varying channel
represented in a dlarray object. |
ofdmdemod (Communications Toolbox) | Demodulate a time-domain signal represented in a
dlarray object using orthogonal frequency
division multiplexing (OFDM). |
ofdmEqualize (Communications Toolbox) | Equalize a frequency-domain OFDM signal represented in a
dlarray object. |
ofdmmod (Communications Toolbox) | Modulate a frequency-domain signal represented in a
dlarray object using orthogonal frequency
division multiplexing (OFDM). |
MATLAB Functions with dlarray Code Generation Support
Unary Element-wise Functions
Binary Element-wise Operators
| Function | Notes and Limitations |
|---|---|
complex | For the one-input syntax, the output
For the two-input
syntax, if |
minus,
- | If the two
|
mod (since R2026a) | |
plus,
+ | |
power,
.^ | |
rdivide,
./ | |
realpow | |
rem (since R2026a) | |
times,
.* |
Reduction Functions
| Function | Notes and Limitations |
|---|---|
mean |
|
median |
|
norm (since R2026b) | The output
|
vecnorm | |
prod |
|
sum |
Extrema Functions
| Function | Notes and Limitations |
|---|---|
ceil | The output
|
eps |
|
fix | The output
|
floor | The output
|
max |
|
min | |
round |
|
Fourier Analysis and Filtering
| Function | Notes and Limitations |
|---|---|
fft | Only unformatted input arrays are supported. |
ifft |
|
filter | Only unformatted input arrays are supported. |
Other Math Operations
| Function | Notes and Limitations |
|---|---|
colon,
: |
|
interp2 (since R2026b) |
|
mtimes,
* |
|
pagemtimes |
|
pinv | |
sort | |
lsqminnorm |
|
pagelsqminnorm |
|
Logical Operations
| Function | Notes and Limitations |
|---|---|
and,
& | If the two
|
eq,
== | If the two
|
ge,
>= | |
gt,
> | |
le,
<= | |
lt,
< | |
ne,
~= | |
not,
~ | The output
|
or,
| | If the two
|
xor |
Size Manipulation Functions
| Function | Notes and Limitations |
|---|---|
reshape | The output For code generation, the size dimensions must be fixed size. |
squeeze | Two-dimensional |
repelem | If you use the If you
use the |
repmat | The output |
Transposition Operations
| Function | Notes and Limitations |
|---|---|
ctranspose,
' | If the input
|
permute | If the input For code generation, the dimension order must be fixed size. |
ipermute | If the input For code generation, the dimension order must be fixed size. |
transpose,
.' | If the input
|
Concatenation Functions
| Function | Notes and Limitations |
|---|---|
cat | The
For code generation, the dimension
order to |
horzcat | |
vertcat |
Conversion Functions
| Function | Notes and Limitations |
|---|---|
cast |
|
double | The output is a |
logical | The output is a dlarray that contains data of
type logical. |
single | The output is a dlarray that contains data of
type single. |
Comparison Functions
| Function | Notes and Limitations |
|---|---|
isequal |
|
isequaln |
|
Data Type and Value Identification Functions
| Function | Notes and Limitations |
|---|---|
isdlarray (Deep Learning Toolbox) | N/A |
isfloat | The software
applies the function to the underlying data of an input
|
islogical | |
isnumeric | |
isreal | |
underlyingType | N/A |
validateattributes | If input array A is a formatted
dlarray, its dimensions are permuted to match
the order "SCBTU". Size validation is applied
after permutation. |
Size Identification Functions
| Function | Notes and Limitations |
|---|---|
iscolumn | This function returns true for a
dlarray that is a column vector, where each
dimension except the first is a singleton. For example, a
3-by-1-by-1 dlarray is a column vector. |
ismatrix | This function returns true for
dlarray objects with only two dimensions and
for dlarray objects where each dimension except the
first two is a singleton. For example, a 3-by-4-by-1
dlarray is a matrix. |
isrow | This function returns true for a
dlarray that is a row vector, where each
dimension except the second is a singleton. For example, a
1-by-3-by-1 dlarray is a row vector. |
isscalar | N/A |
isvector | This function returns true for a
dlarray that is a row vector or column vector.
Note that isvector does not consider a
1-by-1-by-3 dlarray to be a vector. |
length | N/A |
ndims | If the input |
numel | N/A |
size | If the input |
Creator Functions
Usage Notes and Limitations
For deep learning arrays, code generation has the following limitations:
The data format argument of the
dlarrayobject must be a compile-time constant. For example,function out = foo() dlA = dlarray(ones(5,4),"SSC"); %fmt "SSC" is constant . . . end
The code generation report does not display the size of the
dlarrayobject. The size is always displayed as1x1.
For code generation, the
dlarrayinput to thepredictmethod of thedlnetworkobject must besingledata type.Code generation for
dlarrayindexing:If you set
dlY(idx1,...,idxn) = dlX, thendlYanddlXmust be assignment compatible.Size of the data must not change. Out-of-bounds assignment operation is not supported.
The assignment statement cannot add or drop
Ulabels.
Code generation does not support deleting of parts of a
dlarrayobject by usingdlX(idx1,…,idxn) = [].Indexed assignment into a
dlarrayobject inside aparforloop is not supported. Extract the underlying data usingextractdata, perform the assignment on the numeric array, and then wrap the result in a newdlarrayobject.
See Also
Objects
Topics
- Generate Digit Images Using Variational Autoencoder on Intel CPUs
- Custom Training Loops (Deep Learning Toolbox)
- Train Network Using Custom Training Loop (Deep Learning Toolbox)
- Make Predictions Using dlnetwork Object (Deep Learning Toolbox)