gpt4 book ai didi

matlab - mex 文件输出的 int 数组

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:58 25 4
gpt4 key购买 nike

我正在尝试创建一个 mex 函数,其输入是一个整数,输出是一个整数数组。所以函数看起来像:int *myFunction(unsigned int N)。在 mexFunction 中,我声明了一个类型为 int 的变量 *variab,然后

N = mxGetScalar(prhs[0]);

/* assign a pointer to the output */
siz= 2*ceil(log(1.0*N)/log(2.0)-0.5)+1;
plhs[0] = mxCreateDoubleMatrix(1,siz, mxREAL);
vari = (int*) mxGetPr(plhs[0]); */
/* Call the subroutine. */
vari = myFunction(N);
mexPrintf("The first value is %d\n", vari[0]);

问题是第一个值是正确的(其他值也经过检查并且也是正确的)但是当我调用例程 mxFunction(16) 时,我只得到 0 作为输出。我猜是因为我的输出是一个int数组,但我不知道如何解决这个问题。有什么提示吗?干杯。

最佳答案

Matlab 默认处理 double 。您可以根据您的代码片段轻松地将它们转换到您的 mex 函数中,如下例所示。我制作了一个执行演示算法的 myFunction。我没有返回数据类型,而是使它成为一个 void 函数,并向它传递一个指向输出的指针,以便它可以填充它。 . .

/*************************************************************************/
/* Header(s) */
/*************************************************************************/
#include "mex.h"
#include "math.h"


/*************************************************************************/
/*the fabled myFunction */
/*************************************************************************/
void myFunction(unsigned int N, unsigned int siz, double* output)
{
int sign = 1;
for(int ii=0; ii<siz; ++ii)
{
output[ii] = (double)(ii * sign + N);
sign *= -1;
}

}


/*************************************************************************/
/* Gateway function and error checking */
/*************************************************************************/
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
/* variable declarations */
unsigned int siz;
double N;

/* check the number of input and output parameters */
if(nrhs!=1)
mexErrMsgTxt("One input arg expected");
if(nlhs > 1)
mexErrMsgTxt("Too many outputs");

N = mxGetScalar(prhs[0]);

/* assign a pointer to the output */
siz= 2*ceil(log(1.0*N)/log(2.0)-0.5)+1;
plhs[0] = mxCreateDoubleMatrix(1,siz, mxREAL);
myFunction(N, siz, mxGetPr( plhs[0]) );
}

关于matlab - mex 文件输出的 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com