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;
}