0

我的 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

有人可以帮我吗?非常感谢!

4

2 回答 2

4

mxGetPr不返回vector<vector<double> >. 它返回一个double *. MATLAB 数组以列为主连续存储在内存中。假设您已经创建了具有正确尺寸的 plhs[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 个索引转换为线性偏移量。

于 2012-08-24T19:43:42.077 回答
0

看起来 mxGetPr 正在向您返回一个指向双精度数组的指针,并且您正在将它分配给一个向量向量。

这应该有效:

double* indexes = mxGetPr(plhs[0]);
于 2012-08-24T19:41:59.750 回答