knn.c

来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· C语言 代码 · 共 60 行

C
60
字号
#include "proutils.h"int compare( const void *arg1, const void *arg2 );void knn(SDoubleMtx *Anlg,SDoubleMtx *Dist,SDoubleMtx *PRO,SDoubleMtx *OBJ,int Type){	int register lp,lo,l2,DO,d2,DP,N;	double *dum1,dum2,*dist,*P,*O;	O=OBJ->Mtx;	P=PRO->Mtx;	DP=PRO->Dim[0];	d2=OBJ->Dim[1];	DO=OBJ->Dim[0];	N=Anlg->Dim[1];	dum1=(double *)malloc(sizeof(double)*d2);	dist=(double *)malloc(sizeof(double)*DO*2);	for(lp=0;lp<DP;lp++){		for(l2=0;l2<d2;l2++){			//dum1[l2]=PRO->Mtx[l2*DP+lp];			dum1[l2]=P[l2*DP+lp];		}		for(lo=0;lo<DO;lo++){			dist[lo*2]=0;			for(l2=0;l2<d2;l2++){				//dum2=dum1[l2]-OBJ->Mtx[l2*DO+lo];					dum2=dum1[l2]-O[l2*DO+lo];					dist[lo*2]+=dum2*dum2; /*Tipo de norma*/			}			dist[lo*2+1]=lo+1;		}		qsort( (void *)dist, (size_t)DO, sizeof( double)*2, compare );				for(l2=0;l2<N;l2++){			Anlg->Mtx[l2*DP+lp]=dist[l2*2+1];			if(Dist->Mtx!=NULL) 				Dist->Mtx[l2*DP+lp]=sqrt(dist[l2*2]);		}			}	free(dum1);	free(dist);}int compare( const void *arg1, const void *arg2 ){	/*	double a,b;	a=((double *)arg1)[0];	b=((double *)arg2)[0];	if(a<b) return -1;	else if(b>a) return 1;	else return 0;	*/		if(((double *)arg1)[0]<((double *)arg2)[0]) return -1;	else if(((double *)arg1)[0]>((double *)arg2)[0]) return 1;	else return 0;	}

⌨️ 快捷键说明

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