Create Arrays with C++ MATLAB Data API
Create Arrays
The C++ MATLAB® Data API lets applications running outside of MATLAB work with MATLAB data through a MATLAB-neutral interface. The API uses modern C++ semantics and design patterns and avoids data copies whenever possible by using MATLAB copy-on-write semantics.
The header file for the MATLAB Data API is MatlabDataArray.hpp
.
The matlab::data::Array
class is the base
class for all array types. It provides general array information, such as type and
size. The Array
class supports both one-dimensional and
multi-dimensional arrays. The MATLAB Data API uses zero-based indexing.
To create an array, first create a factory using matlab::data::ArrayFactory
.
matlab::data::ArrayFactory factory;
Use the factory to create a 2-by-2 array of type double
.
Specify the array values in column-major format to match the ordering of the
MATLAB statement A = [1 2; 3 4]
. To inspect the array, use
the functions in the matlab::data::Array
class.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; Array A = factory.createArray<double>({ 2,2 }, { 1.0, 3.0, 2.0, 4.0 }); // Inspect array ArrayType c = A.getType(); ArrayDimensions d = A.getDimensions(); size_t n = A.getNumberOfElements(); return 0; }
This code is equivalent to the following MATLAB statements.
A = [1 2; 3 4]; c = class(A); d = size(A); n = numel(A);
The matlab::data::TypedArray
class supports iterators, which
enable you to use range-based for
loops. This example creates a
1-by-6 array from the 3-by-2 TypedArray
.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Assign values of A to the double array C double C[6]; int i = 0; for (auto e : A) { C[i++] = e; } return 0; }
Create Column Major Array from Row Major Data
If you have an std::vector
created with data in row major
order, you can create a column major TypedArray
in MATLAB with its
data.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; const std::vector<double> data{1, 2, 3, 4, 5, 6}; // Create a 2-by-3 TypedArray in column-major order TypedArray<double> A = factory.createArray( {2,3}, data.begin(), data.end(), InputLayout::ROW_MAJOR); // Assign values of A to the double array C double C[6]; int i = 0; for (auto e : A) { C[i++] = e; } return 0; }
Operate on Each Element in an Array
Modify each element in a matlab::data::Array
using a reference
to the element. This example multiplies each element in the
matlab::data::TypedArray
by a scalar value.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Define scalar multiplier double multiplier(10.2); // Multiple each element in A for (auto& elem : A) { elem *= multiplier; } return 0; }