我的c ++代码有问题。我想从我的cpp程序返回一个k维矩阵到Matlab。
我要传递的矩阵存储在all_data
中,并且是一个大小为(npoints+1) x ndims
的矩阵。
我一直在寻找如何做到这一点,我想出了:
//send back points
vector< vector <double> > indexes = mxGetPr(plhs[0]);
for (int i=0; i < (npoints1+1); i++)
for (int j=0; j < ndims1; j++)
indexes[ i ][ j ] = all_data[ i ][ j ];
但它不起作用,因为all_data
是vector<vector<double>>
变量,而matlab说:
error: conversion from 'double*' to non-scalar type
'std::vector<std::vector<double, std::allocator<double> >,
std::allocator<std::vector<double,
std::allocator<double> > > >' requested
有人可以帮帮我吗?非常感谢!
答案 0 :(得分:4)
mxGetPr
不会返回vector<vector<double> >
。它返回double *
。 MATLAB数组连续存储在内存中,列为主。假设您已经创建了具有正确尺寸的plh [0],那么您需要做的就是:
double *indexes = mxGetPr(plhs[0]);
for (int i=0; i < (npoints1+1); i++)
for (int j=0; j < ndims1; j++)
indexes[i + ndims1*j] = all_data[ i ][ j ];
请注意将2个索引转换为线性偏移。
答案 1 :(得分:0)
看起来mxGetPr会返回一个指向双精度数组的指针,并将它分配给向量矢量。
这应该有效:
double* indexes = mxGetPr(plhs[0]);