在matlab中查找矩阵中的行,快速且具有C的特殊条件

时间:2015-03-16 08:23:54

标签: c performance matlab matrix

我在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菜鸟,所以我认为这是一个非常小的错误,但是如果有人能看一下,我会非常感激。

提前致谢:)

亲切的问候,

标记

0 个答案:

没有答案