![](/img/trans.png)
[英]Matlab C++ - Receive Dynamic Size Output type (emxArray_real_T)
[英]Convert vector<> to emxArray_real_T in C++ after code-generation from MATLAB
我已经使用MATLAB编码器将一些matlab代码转换为C ++。
我知道有些问题与此问题类似,但是我发现的任何解释都不能帮助解决我的问题,但有些不同。
为C ++生成的代码为我提供了以下功能:
void getTargetPoint(const emxArray_real_T *eyeMatrix, const emxArray_real_T
*HypAlpha, const emxArray_real_T *HypCov, const
emxArray_real_T *HypMean, const double xs[4], double Ymu[3])
Ymu是我要查找的输出。 但是,即使我将输入定义为转换器中大小不确定的数组,它们在我的代码中也是向量的向量:
eyeMatrix = vector<vector <double>>
它们都有不同的尺寸,例如eyeMatrix = [968x4],但在任何其他情况下,它可能是[anything x 4]
我已经尝试了很多事情,但是我无法将输入数据(向量的向量)转换为类型:emxArray_real_T
反正有这样做吗? 还是应该将输入数据转换为其他数据,然后转换为emxArray_real_T?
任何帮助或想法,我们将不胜感激!
这个答案假设eyeMatrix
是一个矩形矩阵(即每个内部向量具有相同的长度),因为生成的代码可能打算与无参差的数组一起使用。
您可以签出:
https://stackoverflow.com/a/24271438/3297440
以及有关使用emxArray*
数据类型的概述的文档 。
总结答案,您将在文件<name>_emxAPI.h
中声明的函数如下所示:
extern emxArray_real_T *emxCreateWrapper_real_T(double *data, int rows,
int cols);
extern emxArray_real_T *emxCreate_real_T(int rows, int cols);
您会注意到,第一个为double *
。 这应该是指向以列优先顺序存储的数据的指针。
由于eyeMatrix
可能以行为主的顺序,并且实际上可能不是连续的(我不知道保证嵌套的std::vectors
产生连续的数据),第一步可以是使用适当的尺寸调用emxCreate_real_T
。
这将分配并返回一个emxArray_real_T
,我们可以将其称为emx
。 emx->size
将包含2个元素,它们是您设置的尺寸。 字段emx->data
将是一个指向rows*cols
值的指针(在您的情况下为double
值)。 然后,您可以按列主要方式将数据从eyeMatrix
复制到emx->data
。 因此,如果您的矩阵是:
1, 2
3, 4
emx->data
应为:
1, 3, 2, 4
从那里,只需传递emx
作为输入。
最后,当完成emxArray_real_T
值后,不要忘记调用适当的emxDestroyArray*
函数来清理所有分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.