📄 distance_matrix_mex.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 + -