转换向量<&燃气轮机;用C++;从MATLAB生成代码后 我用MATLAB编码器将一些MATLAB代码转换成C++。
我知道有一些问题与此类似,但我发现的任何解释都无助于解决我的问题,这有些不同 < > C++生成的代码给了我以下函数:转换向量<&燃气轮机;用C++;从MATLAB生成代码后 我用MATLAB编码器将一些MATLAB代码转换成C++。,c++,matlab,matlab-coder,C++,Matlab,Matlab Coder,我知道有一些问题与此类似,但我发现的任何解释都无助于解决我的问题,这有些不同 < > C++生成的代码给了我以下函数: void getTargetPoint(const emxArray_real_T *eyeMatrix, const emxArray_real_T *HypAlpha, const emxArray_real_T *HypCov, const emxArray_real_T *HypMean, const do
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=vector
它们都有不同的尺寸,例如,eyeMatrix=[968x4],但在任何其他情况下都可能是[anything x 4]
我已经尝试了很多方法,但我无法将输入数据(向量的向量)转换为类型:emxArray\u real\T
有什么办法可以这样做吗?或者我应该将输入数据转换成其他数据,然后再转换成emxArray\u real\T
非常感谢您的任何帮助或想法 该答案假设
eyeMatrix
是一个矩形矩阵(即每个内部向量具有相同的长度),因为生成的代码可能用于非参差不齐的阵列
您可以查看:
有关使用emxArray*
数据类型的概述,请参阅
为了总结答案,您将在文件\u 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\u real\T
这将分配并返回一个emxArray\u real\u 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\u real\u t
值时,不要忘记调用适当的emxDestroyArray*
函数来清理任何分配的内存。每个向量在向量中的大小是否不同?非常感谢@RyanLivingston,我将尝试解决这个问题,我想我现在已经理解了emxArray希望如何接收数据了!听起来不错,非常欢迎@Slash。如果您有其他问题,请发回。我的代码在@RyanLivingston运行得很好!再次感谢,我真的很感激