gaussianmex.cpp

来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· C++ 代码 · 共 57 行

CPP
57
字号
// This is equivalent to gaussian.m
// How to compile:
// mex -Id:/users/jang/c/lib -Id:/users/jang/c/lib/utility -Id:/users/jang/c/lib/dcpr gaussianMex.cpp d:/users/jang/c/lib/dcpr/dcpr.cpp d:/users/jang/c/lib/utility/utility.cpp

#include <string.h>
#include <math.h>
#include "mex.h"
#include "dcpr.h"

/* Input Arguments */
#define DATA		prhs[0]
#define GPARAM		prhs[1]
/* Output Arguments */
#define PROB		plhs[0]
			
void mexFunction(
	int nlhs,	mxArray *plhs[],
	int nrhs, const mxArray *prhs[])
{
	double *data, *mu, *sigma, *prob;
	int i, dim, dataNum, sigmaDim;

	/* Check for proper number of arguments */
	if (nrhs<2){
		char message[200];
		strcpy(message, mexFunctionName());
		strcat(message, " requires 2 input arguments.\n");
		strcat(message, "Usage: prob = ");
		strcat(message, mexFunctionName());
		strcat(message, "(data, gParam)");
		strcat(message, "\n\t(Note that gParam.sigma must be a scalar!)");
		mexErrMsgTxt(message);
	}

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

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

	/* Assign pointers to the various parameters */
	data = mxGetPr(DATA);
	mxArray *fieldValue;
	fieldValue=mxGetField(GPARAM, 0, "mu");		mu=mxGetPr(fieldValue);
	fieldValue=mxGetField(GPARAM, 0, "sigma");	sigma=mxGetPr(fieldValue); sigmaDim=mxGetM(fieldValue)*mxGetN(fieldValue);
	
	if (sigmaDim==1)
		for (i=0; i<dataNum; i++)
			prob[i]=gaussian01(data+i*dim, dim, mu, sigma);
	else if (sigmaDim==dim)
		for (i=0; i<dataNum; i++)
			prob[i]=gaussian02(data+i*dim, dim, mu, sigma);
	else if (sigmaDim==dim*dim)
			mexErrMsgTxt("Full covariance matrix is not supported!");
}

⌨️ 快捷键说明

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