⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataitem.cpp

📁 简单分类器 VC++ 用于简单的分类
💻 CPP
字号:
#include "StdAfx.h"
#include ".\dataitem.h"
#include "formatstr.h"

CDataItem::CDataItem(void)
{
	m_nClassId = INVALID_CLASSID;
}

CDataItem::CDataItem(int nDimension, int nClassId)
{
	m_nClassId = nClassId;
	m_Elements.resize(nDimension); //预留数据项空间
}

////拷贝构造函数
//CDataItem::CDataItem(CDataItem &item)
//{
//	m_nClassId = item.ClassID();
//	m_Elements.resize(item.Dimension());
//	for(int i=0; i<item.Dimension(); i++)
//		m_Elements[i] = item[i];
//}

CDataItem::~CDataItem(void)
{
}

//从字符串加载数据(为了输入)
//sDataLine格式: 第一项为分类,后面为各维数据
void CDataItem::FromString(char* sDataLine)
{
	//清空原有数据
	m_Elements.clear();
	m_nClassId = INVALID_CLASSID;

	//分解字符串, 加载新的数据
	char *sSub;
	bool bFirst = true;
	while(*sDataLine)
	{
		sSub = GetSubStr(sDataLine, ',', 0, 0); //GetSubStr: 在formatstr.cpp中定义
		if (bFirst)
		{
			m_nClassId = atoi(sSub);
			bFirst = false;
		}
		else
			m_Elements.push_back(atof(sSub));
	}
}

//转换为字符串表示(为了输出)
CString CDataItem::ToString()
{
	CString sResult, sTmp;
	sResult.Format("%d,", m_nClassId);
	for(int i=0; i<m_Elements.size(); i++)
	{
		sTmp.Format("%f,", m_Elements[i]);
		sResult +=  sTmp;
	}
	sResult = sResult.Left(sResult.GetLength()-1);

	return sResult;
}

inline double& CDataItem::GetAt(int nIndex)
{
	return m_Elements.at(nIndex);
}


//重载[]操作符,用于存取m_Elements中的各项数据
inline double& CDataItem::operator [] (int nIndex)
{
	return m_Elements.at(nIndex);
}
void CDataItem::operator += (CDataItem& item)
{
	if (Dimension() != item.Dimension())
		return;
	for(int i=0; i<item.Dimension(); i++)
		m_Elements[i] += item[i];
}

void CDataItem::operator -= (CDataItem& item)
{
	if (Dimension() != item.Dimension())
		return;
	for(int i=0; i<item.Dimension(); i++)
		m_Elements[i] -= item[i];
}

void CDataItem::operator /= (double d)
{
	for(int i=0; i<Dimension(); i++)
		m_Elements[i] /= d;
}


void CDataItem::operator *= (double d)
{
	for(int i=0; i<Dimension(); i++)
		m_Elements[i] *= d;
}

//计算与anotherData的欧几里得距离
#include <math.h>
double CDataItem::DistanceFrom(CDataItem &anotherData)
{
	double d = 0;
	for (int i=0; i<Dimension(); i++)
		d += (m_Elements[i]-anotherData[i])*(m_Elements[i]-anotherData[i]);
	return pow(d, 0.5);
}

⌨️ 快捷键说明

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