我在matlab中使用mex文件找到一种在大矩阵S中找到行矩阵的快速方法。下面写的mexfile可以做到这一点,但仅适用于S中的唯一s。但是在我的应用程序中,行矩阵s在大矩阵S中出现多次。
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[], mwSize, lastfound)
{
double *S, *s *lastfound;
mwSize n1, n2, i1, i2, k;
S = mxGetPr(prhs[0]);
n1 = mxGetM(prhs[0]);
// n2 = mxGetN(prhs[0]);
n2 = 3;
s = mxGetPr(prhs[1]);
for (i1 = lastfound; i1 < n1; i1++) {
k = i1;
for (i2 = 0; i2 < n2; i2++) {
if (S[k] != s[i2]) {
break;
}
k += n1;
}
if (i2 == n2) { // Matching row found:
plhs[0] = mxCreateDoubleScalar((double) (i1 + 1));
return;
}
}
// No success:
plhs[0] = mxCreateDoubleScalar(mxGetNaN());
}
所以我尝试使用另一个输入&#39; lastfound&#39;这将使代码能够在lastfound + 1处启动(在调用函数时添加+1),以便在找到前一行时,代码开始搜索第二行s。我这样做直到mex文件返回NaN。然而,它不起作用,代码在最后一步+ 1步骤没有启动。我是一个C菜鸟,所以我认为这是一个非常小的错误,但是如果有人能看一下,我会非常感激。
提前致谢:)
亲切的问候,
标记