matthiasm@8: /* C mex version of normalise.m in misc directory */ matthiasm@8: matthiasm@8: #include "mex.h" matthiasm@8: matthiasm@8: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) matthiasm@8: { matthiasm@8: double *T, *sum_ptr, sum; matthiasm@8: int i, N; matthiasm@8: matthiasm@8: plhs[0] = mxDuplicateArray(prhs[0]); matthiasm@8: T = mxGetPr(plhs[0]); matthiasm@8: if(mxIsSparse(plhs[0])) N = mxGetJc(plhs[0])[mxGetN(plhs[0])]; matthiasm@8: else N = mxGetNumberOfElements(plhs[0]); matthiasm@8: matthiasm@8: plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL); matthiasm@8: sum_ptr = mxGetPr(plhs[1]); matthiasm@8: matthiasm@8: sum = 0; matthiasm@8: for (i = 0; i < N; i++) { matthiasm@8: sum += *T++; matthiasm@8: } matthiasm@8: T = mxGetPr(plhs[0]); matthiasm@8: if (sum > 0) { matthiasm@8: for (i = 0; i < N; i++) { matthiasm@8: *T++ /= sum; matthiasm@8: } matthiasm@8: } matthiasm@8: *sum_ptr = sum; matthiasm@8: }