在MEXC++中从std::向量创建MATLAB数组



我想知道是否有比我在下面所做和写的更优雅的方法来从std::vector创建MATLAB数组。

我在下面的Matlab论坛上的一个问题中找到了一个更简单的实现,但这个问题仍然存在。MathWorks:将std::vector内容复制到TypedArray

我使用了缓冲区,基于matlab::data::SparseArray的生成方式(C++类用于创建数组(。免责声明:我真的是新手!

假设我们有一个二重的向量V

matlab::data::ArrayFactory f;
// these objects are std::unique_ptr<T[],matlab::data::buffer_deleter_t>
auto V_b_ptr = f.createBuffer<double>(V.size());
// this pointer points to the first adress that the std::unique_ptr points to
double* V_ptr = V_b_ptr.get();
// fill the buffer with the V values
std::for_each(V.begin(), V.end(), [&](const double& e) {*(V_ptr++) = e;} );
// finally create Matlab array from buffer
matlab::data::TypedArray<double> A = f.createArrayFromBuffer<double>({1, V.size()}, std::move(V_b_ptr));

在第二个链接中,似乎有一种方法可以使用factory.createArray(...),使其填充给定的数据。但我没能做到。

经过几个小时的努力,我写下了这个问题。但在提交之前,我又给了它一个小时。我终于做到了。我在这里发布了解决方案,以防对任何人都有帮助。

与问题中的例子一样,假设我们有一个双Vstd::vector

matlab::data::ArrayFactory f;
matlab::data::TypedArray<double> A = f.createArray<double>({1, V.size()}, V.data(), V.data()+V.size());

相关内容

  • 没有找到相关文章

最新更新