Reputation: 69
I have a problem with my c++ code. I want to return a matrix of k-dimensions from my cpp program to Matlab.
The matrix I want to pass is stored in all_data
, and is a matrix of size (npoints+1) x ndims
.
I have been looking how to do that, and I have come up with:
//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 ];
But it does not work, as all_data
is a vector<vector<double>>
variable, and matlab says:
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
Can someone help me out? Thanks a lot!
Upvotes: 0
Views: 2716
Reputation: 14927
mxGetPr
does not return a vector<vector<double> >
. It returns a double *
. MATLAB arrays are stored contiguously in memory, column-major. Assuming you've created plhs[0] with the correct dimensions, then all you need to do is this:
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 ];
Note the conversion of the 2 indices to a linear offset.
Upvotes: 4
Reputation: 9161
It looks like mxGetPr is returning you a pointer to an array of doubles and you are assigning it to a vector of vectors.
This should work:
double* indexes = mxGetPr(plhs[0]);
Upvotes: 0