阅读下面的程序,并写出运行结果

/* 
 * Copyright(c)2016,烟台大学计算机与控制工程学院 
 * All rights reserved. 
 * 文件名称:第12周项目:阅读下面的程序,并写出运行结果
 * 作者:马康泰
 * 完成日期:2016.5.19 
 * 版本号:v1.0 
 * 
 * 问题描述:阅读下面的程序,并写出运行结果 
 * 输入描述: 
 * 程序输出: 
*/  
 //虚函数
 #include <iostream>
 using  namespace  std;
 class  A  {
 	int a;
 public:
 	A():a(5){
 		virtual void print()const{cout<<a;}
 	};
 	class  B:  public  A {
char  b;
public:
B()  {  b='E';
void  print()  const  { cout<<b;  }
};
void shoow(A &x){x.print();}
int main()
{
	A d1,*p;
	B d2;
	p=&d2;
	d1.print;
	d2.print;
	p->print;
	show(d1);
	show(d2);
	return 0;
}
<img src="https://img-blog.csdn.net/20160526090431669?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
//(2)虚析构函数
#include  <iostream>
using  namespace  std;
class  BASE
{
	private:
		char  c;
	public:
		BASE(char  n):c(n)  {}
virtual  ~BASE()  {  cout<<c; }
};
class  DERIVED:public  BASE
{
private:
	char  c;
	public:
		DERIVED(char  n):BASE(n+1),c(n)  {}
~DERIVED(){  cout<<c;  }
};
int  main(){
DERIVED  d('X');
return  0;
}
<img src="https://img-blog.csdn.net/20160526090437812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
//(3)纯虚函数
#include  <iostream>
using  namespace  std;
class  Base
{
	public:
		virtual  void  Who()  =0;
};
class  FirstDerived:public  Base
{
public:
void  Who()  {  cout<<"F";  }
};
class  SecondDerived:public  Base
{
public:
	void  Who()  {  cout<<"S";  }
};
int  main()
{
FirstDerived  first_obj;
SecondDerived  second_obj;
Base  &bref=first_obj;
bref.Who();
bref=second_obj;
bref.Who();
Base  *bp;
bp=&first_obj;
bp->Who();
bp=&second_obj;
bp->Who();
return  0;
}
<img src="https://img-blog.csdn.net/20160526090447622?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


一般模糊聚类的算法流程如下: 1. 初始化隶属度矩阵 $U$ 和聚类中心矩阵 $C$。 2. 计算每个样本点对每个聚类中心的隶属度。 3. 根据隶属度更新聚类中心。 4. 重复步骤 2 和 3 直到收敛或达到最大迭代次数。 在代码实现方面,可以使用以下伪代码: ```python # 初始化隶属度矩阵和聚类中心矩阵 U = initialize_membership_matrix(X, n_clusters) C = initialize_cluster_centers(X, n_clusters) for i in range(max_iter): # 计算每个样本点对每个聚类中心的隶属度 U = calculate_membership_matrix(X, C, m) # 根据隶属度更新聚类中心 C = calculate_cluster_centers(X, U, m) # 判断是否收敛 if is_converged(U, U_prev): break U_prev = U # 返回聚类结果 labels = assign_labels(U) ``` 下面是一个模糊 $c$ 均值聚类的 Python 实现,数据集使用的是 scikit-learn 自带的 iris 数据集: ```python import numpy as np from sklearn.datasets import load_iris def initialize_membership_matrix(X, n_clusters): n_samples = X.shape[0] U = np.random.rand(n_samples, n_clusters) U /= np.sum(U, axis=1)[:, np.newaxis] return U def initialize_cluster_centers(X, n_clusters): indices = np.random.choice(X.shape[0], n_clusters, replace=False) return X[indices] def calculate_membership_matrix(X, C, m): n_samples = X.shape[0] n_clusters = C.shape[0] U = np.zeros((n_samples, n_clusters)) for i in range(n_samples): distances = np.linalg.norm(X[i] - C, axis=1) for j in range(n_clusters): if distances[j] == 0: U[i, j] = 1 else: U[i, j] = np.sum((distances[j] / distances) ** (2 / (m - 1))) ** -1 return U def calculate_cluster_centers(X, U, m): n_clusters = U.shape[1] C = np.zeros((n_clusters, X.shape[1])) for j in range(n_clusters): u_jm = U[:, j] ** m C[j] = np.sum(X * u_jm[:, np.newaxis], axis=0) / np.sum(u_jm) return C def is_converged(U, U_prev): return np.allclose(U, U_prev) def assign_labels(U): return np.argmax(U, axis=1) def fuzzy_cmeans(X, n_clusters, m=2, max_iter=100, error=1e-5): U = initialize_membership_matrix(X, n_clusters) C = initialize_cluster_centers(X, n_clusters) for i in range(max_iter): U_prev = U U = calculate_membership_matrix(X, C, m) C = calculate_cluster_centers(X, U, m) if is_converged(U, U_prev): break labels = assign_labels(U) return labels if __name__ == '__main__': iris = load_iris() X = iris.data y = iris.target labels = fuzzy_cmeans(X, n_clusters=3) print(labels) ``` 运行结果为: ``` [2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ``` 可以看到,模糊聚类成功将 iris 数据集分成了 3 类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值