📄 dtwmex.cpp
字号:
#include <stdlib.h>
#include "mex.h"
#include "matrix.h"
/* Input Arguments */
#define DATA1 prhs[0]
#define DATA2 prhs[1]
#define WINDOWWIDTH prhs[2]
#define ENDPOINTOPT prhs[3]
/* Output Arguments */
#define MINDISTANCE plhs[0]
#define PATHSIZE plhs[1]
#include "tempodtw.cpp"
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
midType *data1, *data2;
int size1, size2, nodeSize;
int i, pathSize;
int windowWidthX, windowWidthY;
int fixLeft, fixRight;
/* Check for proper number of arguments */
if (nrhs != 4)
mexErrMsgTxt("Requires 4 input arguments.");
else if (mxGetM(DATA1) != mxGetM(DATA2))
mexErrMsgTxt("data1 and data2 must have the same node size.");
/*input arguments*/
nodeSize = mxGetM(DATA1);
size1 = mxGetN(DATA1);
size2 = mxGetN(DATA2);
data1 = new midType[size1 * nodeSize];
for (i = 0; i < size1 * nodeSize; i++)
data1[i] = mxGetPr(DATA1)[i];
data2 = new midType[size2 * nodeSize];
for (i = 0; i < size2 * nodeSize; i++)
data2[i] = mxGetPr(DATA2)[i];
if (mxGetM(WINDOWWIDTH) * mxGetN(WINDOWWIDTH) == 1)
windowWidthX = windowWidthY = mxGetPr(WINDOWWIDTH)[0];
else
{
windowWidthX = mxGetPr(WINDOWWIDTH)[0];
windowWidthY = mxGetPr(WINDOWWIDTH)[1];
}
if (mxGetM(ENDPOINTOPT) * mxGetN(ENDPOINTOPT) == 1)
fixLeft = fixRight = mxGetPr(ENDPOINTOPT)[0];
else
{
fixLeft = mxGetPr(ENDPOINTOPT)[0];
fixRight = mxGetPr(ENDPOINTOPT)[1];
}
/* Create a matrix for minDistance */
MINDISTANCE = mxCreateDoubleMatrix(1, 1, mxREAL);
PATHSIZE = mxCreateDoubleMatrix(1, 1, mxREAL);
mxGetPr(MINDISTANCE)[0]=dtw(data1, size1, data2, size2, nodeSize, windowWidthX,
windowWidthY, fixLeft, fixRight, &pathSize);
mxGetPr(PATHSIZE)[0] = pathSize;
delete [] data1;
delete [] data2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -