dtw2freeupmex.cpp
来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· C++ 代码 · 共 81 行
CPP
81 行
// How to compile:
// MATLAB 7.1: mex dtw2freeUpMex.cpp d:/users/jang/c/lib/dtw.cpp -output dtw2freeUpMex.dll
// Others: mex dtw2freeUpMex.cpp d:/users/jang/c/lib/dtw.cpp
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "mex.h"
#include "dtw.h"
/* Input Arguments */
#define VEC1 prhs[0] /* test input, idx = i */
#define VEC2 prhs[1] /* reference input, idx = j */
#define BEGINCORNER prhs[2]
#define ENDCORNER prhs[3]
#define FREEUP prhs[4]
/* Output Arguments */
#define MINDISTANCE plhs[0]
#define DTWPATH plhs[1]
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
int size1, size2, featureDim, featureDim2, i, beginCorner, endCorner, DTWpathLen, freeUp;
double *vec1, *vec2, *minDistance, *DTWpath, *returnedDTWpath;
/* Check for proper number of input arguments */
if ((nrhs<2)||(nrhs>5)) {
char message[200];
strcpy(message, "Usage: ");
strcat(message, mexFunctionName());
strcat(message, " vec1 vec2 beginCorner endCorner freeUp");
strcpy(message, mexFunctionName());
strcat(message, " requires 2 input arguments.\n");
strcat(message, "Usage: [minDistance, dtwPath] = ");
strcat(message, mexFunctionName());
strcat(message, "(vec1, vec2, beginCorner, endCorner, freeUp)");
mexErrMsgTxt(message);
}
/* Error checking */
featureDim = mxGetM(VEC1);
featureDim2 = mxGetM(VEC2);
if (featureDim!=featureDim2)
mexErrMsgTxt("Feature dimensions of input vectors mismatch!");
size1 = mxGetN(VEC1);
size2 = mxGetN(VEC2);
if ((size1==0) || (size2==0))
mexErrMsgTxt("One or two of the input vectors is empty!");
/* Default values */
beginCorner = 1;
endCorner = 1;
freeUp = 0;
if (nrhs>=3) beginCorner = (int)(mxGetPr(BEGINCORNER)[0]);
if (nrhs>=4) endCorner = (int)(mxGetPr(ENDCORNER)[0]);
if (nrhs>=5) freeUp = (int)(mxGetPr(FREEUP)[0]);
/* Assign pointers to the input arguments */
vec1 = mxGetPr(VEC1);
vec2 = mxGetPr(VEC2);
/* Output min. distance and DTW path*/
MINDISTANCE = mxCreateDoubleMatrix(1, 1, mxREAL);
minDistance = mxGetPr(MINDISTANCE);
minDistance[0] = dtw2freeUp(vec1, size1, vec2, size2, featureDim, beginCorner, endCorner, freeUp, &DTWpathLen, &returnedDTWpath);
if (DTWpathLen>0) {
DTWPATH = mxCreateDoubleMatrix(2, DTWpathLen, mxREAL);
DTWpath = mxGetPr(DTWPATH);
for (i=0; i<2*DTWpathLen; i++)
DTWpath[i] = returnedDTWpath[i]+1; // Plus one for MATLAB indexing
free(returnedDTWpath); // Free returnedDTWpath, which was create within dtw().
} else
DTWPATH = mxCreateDoubleMatrix(0, 0, mxREAL);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?