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

📄 distance_matrix_mex.c

📁 clustering_code ,Clustering Through Ranking On Manifolds Version 0.2 Copyright by Markus Breit
💻 C
字号:
#include "mex.h"
#include <malloc.h>
#include <math.h>

void Calc(int d, int n, double *X, double *DST)
{
	int i,j,k;
	double tmp,t2;
	
	for (j=0; j<n; j++)
	{
		for (i=0; i<j; i++)
		{
			tmp = 0;
			for (k=0; k<d; k++)
			{
				t2 =  X[j*d+k]-X[i*d+k];
				tmp += t2*t2;
			}
			DST[n*j+i] = tmp;
		}
	}
	
	for (j=0; j<n; j++) // diagonal
	{
		DST[n*j+j] = 0;
	}
	
	for (j=0; j<n; j++) // copy
	{
		for (i=j+1; i<n; i++)
		{
			DST[n*j+i] = DST[n*i+j];
		}
	}	
} // Calc

#define NUM_LFT 1
#define DST_IND 0

#define NUM_RGT 3
#define D_IND 0
#define N_IND 1
#define X_IND 2

void mexFunction(int nlhs, mxArray *plhs[],
         int nrhs, const mxArray*prhs[] )
{
	int d,n;
	double *X;
	double *DST;
	
	// wrong usage
	if (nrhs != NUM_RGT || nlhs != NUM_LFT)
	{
		mexErrMsgTxt("usage: D = distance_matrix(d,n,X)");
	} 
	
	// inputs
	d = (int)mxGetScalar(prhs[D_IND]);
	n = (int)mxGetScalar(prhs[N_IND]);
	X = mxGetPr(prhs[X_IND]);
	
	// output
	plhs[DST_IND] = mxCreateDoubleMatrix(n,n,mxREAL);
	DST = mxGetPr(plhs[DST_IND]);
	
	// compute
	Calc(d,n,X,DST);
}

⌨️ 快捷键说明

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