marg_table_ndxd.c
来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· C语言 代码 · 共 83 行
C
83 行
/* C mex version for marg_table_ndxD.m in potential/Tables directory */
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
double *pb, *ps;
int i, j, I, J, N, pointer, temp, maximize;
int *ndx;
char *used;
N = mxGetNumberOfElements(prhs[0]);
pb = mxGetPr(prhs[0]);
maximize = (int)mxGetScalar(prhs[1]);
ndx = mxGetData(prhs[2]);
J = mxGetNumberOfElements(prhs[2]);
I = N / J;
if(J == 1){
plhs[0] = mxDuplicateArray(prhs[0]);
return;
}
if(I == 1){
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
ps = mxGetPr(plhs[0]);
if(maximize){
for(i=0; i<N; i++){
*ps = (*ps < *pb)? *pb : *ps;
pb++;
}
}
else{
for(i=0; i<N; i++){
*ps += *pb++;
}
}
return;
}
plhs[0] = mxCreateDoubleMatrix(I, 1, mxREAL);
ps = mxGetPr(plhs[0]);
used = (char *)malloc(N * sizeof(char));
for(i=0; i<N; i++){
used[i] = 0;
}
pointer = 0;
if(maximize){
for(i=0; i<I; i++){
while(used[pointer]){
pointer++;
}
temp = pointer;
used[pointer] = 1;
for(j=0; j<J; j++){
temp = pointer + ndx[j];
*ps = (*ps < pb[temp])? pb[temp] : *ps;
used[temp] = 1;
}
ps++;
pointer++;
}
}
else{
for(i=0; i<I; i++){
while(used[pointer]){
pointer++;
}
temp = pointer;
used[pointer] = 1;
for(j=0; j<J; j++){
temp = pointer + ndx[j];
*ps += pb[temp];
used[temp] = 1;
}
ps++;
pointer++;
}
}
free(used);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?