⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmmevalintmex.cpp

📁 一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有用,谢谢支持
💻 CPP
字号:
// This is the fix-point version of gmmEvalMex.dll
// How to compile:
// mex gmmEvalIntMex.cpp -Id:/users/jang/c/lib -Id:/users/jang/c/lib/dcpr -Id:/users/jang/c/lib/tableLookUp d:/users/jang/c/lib/dcpr/dcpr.cpp d:/users/jang/c/lib/dcpr/dcprInt.cpp d:/users/jang/c/lib/utility.cpp

#include <string.h>
#include <math.h>
#include "mex.h"
#include "utility.h"
#include "dcpr.h"
#include "dcprIntCpp.h"
#include "logTableVar.h"
#include "logTable.inc"
#include "mixLogSumTableVar.h"
#include "mixLogSumTable.inc"

/* Input Arguments */
#define	DATA		prhs[0]
#define	MEAN		prhs[1]
#define	COVARIANCE	prhs[2]
#define WEIGHT		prhs[3]
/* Output Arguments */
#define	LOGPROB		plhs[0]

FILE *globalFid;
			
void mexFunction(
	int nlhs,	mxArray *plhs[],
	int nrhs, const mxArray *prhs[])
{
	double *data, *mean, *covariance, *weight, *logProb, *eachProb;
	int i, dim, dataNum, gaussianNum, *dataInt, *logProbInt, *eachProbInt;
	char message[200];
	
	

	/* Check for proper number of arguments */
	if (nrhs<4) {
		strcpy(message, mexFunctionName());
		strcat(message, " requires 4 input arguments.\n");
		strcat(message, "Usage: logProb = ");
		strcat(message, mexFunctionName());
		strcat(message, "(data, M, V, W)");
		mexErrMsgTxt(message);
	}

	/* Dimensions of the input matrix */
	dim = mxGetM(DATA);
	dataNum = mxGetN(DATA);
	gaussianNum = mxGetN(MEAN);

	/* Create a matrix for the return argument */
	LOGPROB = mxCreateDoubleMatrix(1, dataNum, mxREAL);
	logProb = mxGetPr(LOGPROB);

	/* Assign pointers to the various parameters */
	data = mxGetPr(DATA);
	mean = mxGetPr(MEAN);
	covariance = mxGetPr(COVARIANCE);
	weight = mxGetPr(WEIGHT);
	
	// Convert to integer
	eachProbInt=(int *)malloc(gaussianNum*dataNum*sizeof(int));
	logProbInt=(int *)malloc(dataNum*sizeof(int));
	dataInt=(int *)malloc(dim*dataNum*sizeof(int)); double2intVec(data, dim*dataNum, dataInt);

	// Create gmm Object for gmmEval().
	GMMPARAMINT gmm;
	gmm.dim=dim;
	gmm.mixNum=gaussianNum;
	gmm.mean=	(int *)malloc(gmm.dim*gmm.mixNum*sizeof(int));
	gmm.covariance=	(int *)malloc(gmm.mixNum*sizeof(int));
	gmm.weight=	(int *)malloc(gmm.mixNum*sizeof(int));
	gmm.gConst=	(int *)malloc(gmm.mixNum*sizeof(int));
	for (i=0; i<gmm.dim*gmm.mixNum; i++) gmm.mean[i]=myRound(mean[i]);
	for (i=0; i<gmm.mixNum; i++) gmm.covariance[i]=myRound(covariance[i]);
	for (i=0; i<gmm.mixNum; i++) gmm.weight[i]=myRound(LOGTABLE_Y_SF*weight[i]);				// ㄆ龟

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -