Copying std::vector contents to TypedArray

23 vues (au cours des 30 derniers jours)
David Moore
David Moore le 29 Juin 2020
Modifié(e) : Paulo Urriza le 16 Mai 2023
Is there a better way to copy the contents of a std::vector to a Matlab Array in C++? The following seems long winded.
V is a std::vector in the code below.
matlab::data::ArrayFactory factory;
matlab::data::TypedArray<double> A = factory.createArray<double>({ 1, V.size() });
int i = 0;
for (auto e : V) {
A[i++] = e;
}

Réponse acceptée

Breno Vincenzo de Almeida
Breno Vincenzo de Almeida le 20 Sep 2020
I managed to do this out after hooours of testing.
matlab::data::ArrayFactory f;
matlab::data::TypedArray<double> A = f.createArray<double>({1, V.size()}, V.data(), V.data()+V.size());
Source: the `matlab::data::ArrayFactory` page in the following link C++ class to create arrays - MATLAB.
But I can't find a way for the ItType method of supplying the data to work.
  2 commentaires
Jason Laks
Jason Laks le 19 Fév 2021
The code above will not compile using the mex command from matlab's command line in R2020a. Does anyone have a code snippet that will work?
Thanks, J.
My attempt at getting the suggestion to work:
matlab::data::ArrayFactory f;
std::vector<double> V(2, 2);
matlab::data::TypedArray<double> A = f.createArray<double>({1,V.size()}, V.data(), V.data()+V.size());
Jason Laks
Jason Laks le 19 Fév 2021
Wait... my apologies. The snippet above does compile.

Connectez-vous pour commenter.

Plus de réponses (1)

Paulo Urriza
Paulo Urriza le 16 Mai 2023
Modifié(e) : Paulo Urriza le 16 Mai 2023
Type can be deduced automatically if you used the createArray overload for std::iterator.
matlab::data::ArrayFactory f;
auto A = factory.createArray({1, V.size()}, V.begin(), V.end());

Catégories

En savoir plus sur Deploy to C++ Applications Using MATLAB Data API (C++11) dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by