亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? em.h

?? 用C++實現了期望最大化算法
?? H
字號:
// Em.h: interface for the CEm class.
//
//////////////////////////////////////////////////////////////////////
// 假設了各維相互獨立,只有方差,沒有協方差
#if !defined _EM_H_
#define _EM_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef PI
#define PI 3.141592653589793115997963468544185161590576171875
#endif
template<class T>//,int num,int dim>
class CEm  
{
public:
	T **	   m_Data;//double
	int        m_M;
	int        m_N;
	int        m_d;
	
	double *   m_P;		// Mixing Parameters
	double **  m_u;		// Mean
	double *   m_v;     // Variance
	
	double *   m_P_old;	// Mixing Parameters
	double **  m_u_old;	// Mean
	double *   m_v_old; // Variance
	
	double *   m_P_x;	// P_x calculation results
	double *   m_P_x_old;	// P_x calculation results
	
	T *        m_Min;//double	// Maximum of each dimension
	T *        m_Max;//double	// Minimum of each dimension
	CEm();
	virtual ~CEm();
	CEm(T **data,int num,int dim, int m) {//double
		initialize(data,num,dim);
		setParameter(m);
	};
	
	CEm(T **data,int num,int dim) {//double
		initialize(data,num,dim);
	};
    void initialize(T **data,int num,int dim);//double
	void setParameter(int m);
	void new_old();
	double P_x_j(int n, int j);
	double P_j_x(int n, int j)  { return P_x_j(n,j) * m_P[j] / m_P_x[n]; };
	double P_x_j_old(int n, int j);
	double pdf(double x[]);
	double P_j_x_old(int n, int j){ return P_x_j_old(n,j) * m_P_old[j] / m_P_x_old[n]; } ;
	void P_x();
	void P_x_old();
	void iteration();
	void display(HDC pDC);
};
inline double random(){
	//srand( (unsigned)time( NULL ) ); //有這句反而產生相同的數
	double result=(double)rand()/RAND_MAX;
	ASSERT(result>=0&&result<=1);
	return result;
}
template<class T>
CEm<T>::CEm()
{

}
template<class T>
CEm<T>::~CEm()
{

}
template<class T>
void CEm<T>::initialize(T **data,int num,int dim)//double
{
  m_Data  = data;
  m_N = num;//Data.length;
  m_d = dim;//Data[0].length;
  m_Min   = new T[m_d];
  m_Max   = new T[m_d];
  int n,i;//,j;
  for(i=0;i<m_d;i++) {
    m_Min[i] = m_Data[0][i];
    m_Max[i] = m_Data[0][i];
    for(n=1;n<m_N;n++) {
      if(m_Min[i] > m_Data[n][i]) m_Min[i] = m_Data[n][i]; else
      if(m_Max[i] < m_Data[n][i]) m_Max[i] = m_Data[n][i];
    }
  }
}
template<class T>
void CEm<T>::setParameter(int m)
{
  int i,j;
  double var = 0.0;
  m_M = m;
  m_P = new double[m];
  m_u = new  double*[m];
  for(i=0;i<m;++i){// [m_d];
	  m_u[i]=new double[m_d];
  }
  m_v = new double[m];
  m_P_old = new double[m];
  m_u_old=new double*[m];//
  for(i=0;i<m;i++){
	  m_u_old[i]=new double[m_d];
  }
  m_v_old = new double[m];
  m_P_x   = new double[m_N];
  m_P_x_old = new double[m_N];
  for(i=0;i<m_d;i++)
    var += (m_Max[i] - m_Min[i]) * (m_Max[i] - m_Min[i]) / 12 / m_d;
  //for(int n=0;n<m_N;++n)//
//	  for(i=0;i<m_d;++i)//
//		  var+=m_Data[n][i]*m_Data[n][i];//
//  var/=m_N;//
  for(j=0;j<m;j++)
  {
    m_P[j] = 1.0 / (double)m;
    m_v[j] = var / 4 + random() * var / 4; 
	//m_v[j]=var;
	//n=j*(m_N-1)/(m-1);
	//for(i=0;i<m_d;i++)
	//	m_u[j][i]=m_Data[n][i];
    for(i=0;i<m_d;i++)
      m_u[j][i] = (m_Max[i] + m_Min[i]) / 2 + (random() - 0.5 ) *  (m_Max[i] - m_Min[i]) / 2;
  }
}
/*
template<class T>
void CEm<T>::setParameter(int m, T* means, T** delta)// 假設了各維相互獨立,只有方差,沒有協方差
{
	int i,j;
	double var = 0.0;
	m_M = m;
	m_P = new double[m];
	m_u = new double*[m];
	for(i=0;i<m;++i){
		m_u[i]=new double[m_d];
	}
	for(i=0;i<m;++i){
		for(j=0;j<m_d;++j){
			m_u[i][j]=means[i*m_d+j];
		}
	}
	m_v = new double[m];
	m_P_old = new double[m];
	m_u_old=new double*[m];//
	for(i=0;i<m;i++){
		m_u_old[i]=new double[m_d];
	}
	m_v_old = new double[m];
	m_P_x   = new double[m_N];
	m_P_x_old = new double[m_N];
	for(i=0;i<m_d;i++)
		var += (m_Max[i] - m_Min[i]) * (m_Max[i] - m_Min[i]) / 12 / m_d;
	//for(int n=0;n<m_N;++n)//
	//	  for(i=0;i<m_d;++i)//
	//		  var+=m_Data[n][i]*m_Data[n][i];//
	//  var/=m_N;//
	for(j=0;j<m;j++)
	{
		m_P[j] = 1.0 / (double)m;
		m_v[j] = var / 4 + random() * var / 4; 
		//m_v[j]=var;
		//n=j*(m_N-1)/(m-1);
		//for(i=0;i<m_d;i++)
		//	m_u[j][i]=m_Data[n][i];
		for(i=0;i<m_d;i++)
			m_u[j][i] = (m_Max[i] + m_Min[i]) / 2 + (random() - 0.5 ) *  (m_Max[i] - m_Min[i]) / 2;
	}
}*/
template<class T>
void CEm<T>::new_old()
{
  int i,j;
  for(j=0;j<m_M;j++)
  {
    m_P_old[j] = m_P[j];
    m_v_old[j] = m_v[j];
    for(i=0;i<m_d;i++)
		m_u_old[j][i] = m_u[j][i];
  }
}
template<class T>
double CEm<T>::P_x_j(int n, int j)
{
  int i;
  double e = 0.0;
  for(i=0;i<m_d;i++)
    e += (m_Data[n][i] - m_u[j][i]) * (m_Data[n][i] - m_u[j][i]);
  e /= -2 * m_v[j] * m_v[j];
  return //exp(e) / pow(2 * PI * m_v[j] * m_v[j], 1 / 2);
	  exp(e) / pow(2 * PI * m_v[j] * m_v[j], (double)m_d / 2.0); 
} 

 /* double CEm::P_j_x(int n, int j)
{
  return P_x_j(n,j) * P[j] / P_x[n];
}//*/
template<class T>
void CEm<T>::P_x()
{
  int n,j;
  for(n=0;n<m_N;n++)
  {
    double temp = 0.0;
    for(j=0;j<m_M;j++)
      temp += P_x_j(n,j) * m_P[j];
    m_P_x[n] = temp;
  }
}
template<class T>
double CEm<T>::P_x_j_old(int n, int j)
{
  int i;
  double e = 0.0;
  for(i=0;i<m_d;i++)
    e += (m_Data[n][i] - m_u_old[j][i]) * (m_Data[n][i] - m_u_old[j][i]);
  e /= -2 * m_v_old[j] * m_v_old[j];
  return //exp(e) / pow(2 * PI * m_v_old[j] * m_v_old[j], 1 / 2); 
	exp(e) / pow(2 * PI * m_v_old[j] * m_v_old[j], (double)m_d / 2.0); 
} 
template<class T>
double CEm<T>::pdf(double x[])
{
  int i,j;
  double e = 0.0;
  double t = 0.0;
  for(j=0;j<m_M;j++) {
    for(i=0;i<m_d;i++)
      e += (x[i] - m_u[j][i]) * (x[i] - m_u[j][i]);
    e /= -2 * m_v[j] * m_v[j];
    e = exp(e) / pow(2 * PI * m_v[j] * m_v[j],(double)m_d / 2.0); 
    t += e*m_P[j];
  }
  return t;
}

/*double CEm::P_j_x_old(int n, int j)
{
  return P_x_j_old(n,j) * P_old[j] / P_x_old[n];
}*/
template<class T>
void CEm<T>::P_x_old()
{
  int n,j;
  for(n=0;n<m_N;n++)
  {
    double temp = 0.0;
    for(j=0;j<m_M;j++)
      temp += P_x_j_old(n,j) * m_P_old[j];
    m_P_x_old[n] = temp;
  }
}
template<class T>
void CEm<T>::iteration()
{
	  int i,j,n;
	  new_old();
	  P_x();
	  P_x_old();
	  
	  // calculate new mean & variance
	  
	  for(j=0;j<m_M;j++)
	  {
		  double denom = 0.0;
		  for(n=0;n<m_N;n++)
			  denom += P_j_x_old(n,j);
		  
		  for(i=0;i<m_d;i++)
		  { 
			  m_u[j][i] = 0.0;
			  for(n=0;n<m_N;n++)
				  m_u[j][i] += P_j_x_old(n,j) * m_Data[n][i];
			  m_u[j][i] /= denom;
		  }
		  
		  m_v[j] = 0.0;
		  for(n=0;n<m_N;n++)
		  {
			  double sum = 0.0;
			  for(i=0;i<m_d;i++)
				  sum += (m_Data[n][i] - m_u[j][i]) * (m_Data[n][i] - m_u[j][i]);
			  m_v[j] += sum * P_j_x_old(n,j);
		  }
		  m_v[j] /= denom * m_d;
		  m_v[j] = sqrt(m_v[j]);
		  
		  m_P[j] = denom / (double)m_N;
	  }
}


template<class T>
void CEm<T>::display(HDC pDC)
{
	  CString newline;// = System.getProperty("line.separator");
	  int i,j;
	  for(j=0;j<m_M;j++)
	  {
		  newline.Format("P(%d)=%f  V(%d)=%f ",j,m_P[j],j,m_v[j]);
		  CString temp;
		  for(i=0;i<m_d;i++){
			  temp.Format("u(%d)(%d)=%f ",j,i,m_u[j][i]);
			  newline+=temp;
		  }
		  TextOut(pDC,0,j*15,newline,newline.GetLength());
	  }
}
#endif // !defined _EM_H_

/*
    //CEm使用實例
	CEm<float> em;
	em.initialize(data,num,dim);
	em.setParameter(5);//models=10.
	for(i=0;i<10;++i){
		//em.new_old();
		em.iteration();
	}
	em.display(pDC->m_hDC);
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国模一区二区三区白浆| 日韩电影一区二区三区四区| 91精品国产91久久综合桃花| 欧美视频中文一区二区三区在线观看| 99久久99久久免费精品蜜臀| 99精品偷自拍| 91麻豆精品国产91久久久使用方法| 在线观看成人小视频| 欧美日韩国产高清一区二区三区| 欧美日韩精品欧美日韩精品一 | 日韩午夜电影在线观看| 日韩欧美中文字幕一区| 国产精品入口麻豆原神| 亚洲大片精品永久免费| 国产福利一区二区三区在线视频| 91福利国产成人精品照片| 91美女在线视频| 91在线观看高清| 91精品久久久久久久99蜜桃| 国产无一区二区| 日韩综合小视频| 91丨九色丨黑人外教| 欧美一区二区三区免费大片| 国产精品不卡在线| 免费成人你懂的| 在线亚洲一区二区| 中文字幕在线观看不卡视频| 免费成人在线观看视频| 欧美亚洲禁片免费| 亚洲日本在线观看| 国产999精品久久久久久| 91精品国产欧美一区二区| 亚洲人成网站色在线观看| 久久爱www久久做| 3d动漫精品啪啪1区2区免费 | 石原莉奈在线亚洲二区| 成人免费视频网站在线观看| 久久一区二区视频| 久久99精品久久久| 亚洲精品在线免费播放| 日产精品久久久久久久性色| 7799精品视频| 久久99精品久久久久久| 精品卡一卡二卡三卡四在线| 韩国成人在线视频| 欧美激情资源网| 成人黄色网址在线观看| 亚洲免费av观看| 欧美精品乱码久久久久久按摩| 天天色天天爱天天射综合| 91精品国产91久久久久久最新毛片| 青青青爽久久午夜综合久久午夜| 精品日本一线二线三线不卡| 裸体一区二区三区| 国产目拍亚洲精品99久久精品| jvid福利写真一区二区三区| 亚洲一区在线观看网站| 精品剧情在线观看| 国产精一品亚洲二区在线视频| 337p亚洲精品色噜噜| 午夜一区二区三区视频| 国产欧美视频一区二区三区| 色综合天天狠狠| 久久成人免费网| 亚洲精品成人a在线观看| 欧美一区二区三区视频免费播放 | 色偷偷久久人人79超碰人人澡| 亚洲青青青在线视频| 日韩一区二区三区视频在线观看| 成人午夜视频福利| 美女性感视频久久| 丝袜诱惑制服诱惑色一区在线观看| 久久亚洲春色中文字幕久久久| 欧美日本精品一区二区三区| 91麻豆国产在线观看| 国产真实精品久久二三区| 天天操天天色综合| 亚洲国产一区二区在线播放| 国产精品麻豆网站| 久久美女高清视频| 国产亚洲精品超碰| 精品久久久久久久一区二区蜜臀| 在线成人小视频| 欧美日韩高清一区二区三区| 91久久线看在观草草青青| 99久久综合狠狠综合久久| 91丨porny丨首页| 日本韩国欧美一区二区三区| 欧美色网站导航| 欧美日韩成人综合在线一区二区| 91在线观看美女| 欧美日韩精品欧美日韩精品一综合 | 美女脱光内衣内裤视频久久影院| 亚洲成人在线观看视频| 日韩精品一级中文字幕精品视频免费观看 | 亚洲免费看黄网站| 亚洲综合色噜噜狠狠| 日韩制服丝袜av| 国产毛片精品国产一区二区三区| 国产精品一区二区在线观看不卡 | 久久久久国产精品厨房| 国产精品久久久久久久久晋中| 国产精品每日更新| 亚洲宅男天堂在线观看无病毒| 天天影视网天天综合色在线播放| 日本不卡一区二区| av不卡一区二区三区| 欧美视频一区二区三区| 精品毛片乱码1区2区3区| 国产精品美日韩| 日本va欧美va瓶| 99精品桃花视频在线观看| 欧美一级高清片| 亚洲最大色网站| 国产精品亚洲第一区在线暖暖韩国 | 91性感美女视频| 日韩精品一区二区三区蜜臀| 亚洲女人小视频在线观看| 激情另类小说区图片区视频区| 欧美日韩中字一区| 国产精品免费aⅴ片在线观看| 精品一区二区三区免费视频| 欧美三级韩国三级日本三斤| 国产精品三级久久久久三级| 国产真实精品久久二三区| 日韩视频在线观看一区二区| 亚洲午夜电影在线| 91搞黄在线观看| 亚洲一区在线免费观看| 色婷婷一区二区三区四区| 亚洲精品福利视频网站| 一本久久综合亚洲鲁鲁五月天| 国产精品国产精品国产专区不片| 国产成人av电影在线| 中文字幕一区二区三区在线不卡 | 美女在线观看视频一区二区| 欧美精品丝袜久久久中文字幕| 婷婷丁香激情综合| 日韩三级在线免费观看| 九九精品一区二区| 久久久久久久久久电影| 视频一区二区国产| 日本久久电影网| 亚洲精品一卡二卡| 日韩一级精品视频在线观看| 国产一区二区三区蝌蚪| 26uuu国产在线精品一区二区| 国产乱码一区二区三区| 一区二区三区在线观看视频| 欧美久久久影院| 成人精品一区二区三区中文字幕| 亚洲品质自拍视频| 久久综合av免费| 91福利在线导航| 国产成a人亚洲| 日韩高清国产一区在线| 国产日韩欧美高清在线| 欧美精品在线视频| 在线观看日韩毛片| 福利一区在线观看| 美女在线视频一区| 日韩在线a电影| 一区二区三区欧美| 亚洲欧美日韩电影| 综合久久久久综合| 自拍偷拍亚洲激情| 成人免费一区二区三区在线观看 | 一区二区视频在线看| 国产午夜精品理论片a级大结局| 欧美日韩亚洲综合一区二区三区 | 国产人成亚洲第一网站在线播放| 欧美三级在线看| 欧美性色综合网| 欧美性一区二区| 欧美日韩国产高清一区二区| 欧美在线视频日韩| 欧美久久久久久蜜桃| 欧美久久久久久蜜桃| 欧美成人性战久久| 久久欧美一区二区| 国产欧美精品一区| 一区二区三区毛片| 日本成人在线网站| 国产成人精品三级麻豆| 成人精品视频一区二区三区 | 亚洲国产精品久久久久婷婷884| 夜夜精品视频一区二区| 视频一区二区中文字幕| 久久99国产精品久久99| www.久久精品| 日韩午夜三级在线| 中文字幕免费在线观看视频一区| 久久久www免费人成精品| 国产三级精品在线| 天天影视色香欲综合网老头| 国产福利一区二区三区在线视频| 久国产精品韩国三级视频| 成人黄页毛片网站| 日韩欧美一区在线观看| 中文字幕亚洲不卡|