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

📄 dataset.cpp

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

CDataSet::CDataSet(void)
{
	m_nClasses = 0;
	m_nDimension = 0;
}

CDataSet::CDataSet(DWORD nSize, int nDimensions)
{
	ASSERT(nSize >= 0);

	m_nClasses = 0;

	SetSize(nSize, nDimensions);
}

CDataSet::~CDataSet(void)
{
	Clear();
}

void CDataSet::Clear()
{
	//释放数据占用的空间
	for(DWORD i=0; i<m_DataItems.size(); i++)
	{
		delete m_DataItems[i];
	}
	m_DataItems.clear();
}

//从数据文件加载
bool CDataSet::Load(CString& sDataFile)
{
	FILE *in = fopen(sDataFile, "rt");
	if (!in)
	{
		TRACE("Open data file fail: %s\n", sDataFile);
		return false;
	}

	Clear();

	char sLine[10240];
	CDataItem *pItem;
	int maxClassId = 0;
	do
	{
		fgets(sLine, 10240, in); //取一行数据
		pItem = new CDataItem; //新分配一个CDataItem对象
		pItem->FromString(sLine);
		if (m_nDimension == 0) //以第一项数据的维数作为数据集的标准维数
			m_nDimension = pItem->Dimension();
		if (pItem->Dimension() != m_nDimension) //数据向的维数不等于标准维数--非法数据
			delete pItem;
		else
		{
			m_DataItems.push_back(pItem); //保存该数据项
			if (maxClassId < pItem->ClassID())
				maxClassId = pItem->ClassID();
		}
	} while(!feof(in));

	m_nClasses = maxClassId+1; //classId从0开始编号

	fclose(in);
	return true;
}

//保存数据到文件
bool CDataSet::Save(CString& sDataFile)
{
	FILE *out = fopen(sDataFile, "w+t");
	if (!out)
	{
		TRACE("Create or open file error: %s\n", sDataFile);
		return false;
	}

	DWORD i;
	CString sDataLine;
	for (i=0; i<Count(); i++)
	{
		sDataLine = m_DataItems[i]->ToString();
		fputs(sDataLine + "\n", out);
	}
	fclose(out);
	return true;
}

CDataItem& CDataSet::operator [] (DWORD nIndex)
{
	return *m_DataItems.at(nIndex);
}

void CDataSet::SetSize(DWORD nSize, int nDimension)
{
	m_nDimension = nDimension;
	if (nSize == 0)
		m_DataItems.resize(0);

	for(DWORD i=0; i<nSize; i++)
		m_DataItems.push_back(new CDataItem(nDimension));
}

⌨️ 快捷键说明

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