读取具有各种维度的txt文件作为k-means算法程序的输入

时间:2014-10-12 01:24:33

标签: c++ data-structures k-means

我正在尝试开发一个将读取文本文件的C ++ k-means程序。问题是文本文件不统一。

例如,data1.txt看起来像

0.1  
3.0  
0.7  
0.5  
0.2  
1.5  
1.6  

和data3.txt看起来像

33 37 53
35 36 52
34 37 53
35 37 51
34 38 52
33 38 51
33 39 52
33 37 52
34 37 52
34 39 52

我想我应该以某种方式将数据存储在矢量中。在不强迫用户告诉程序文本文件中每个条目有多少维度的情况下,开发它的最佳方法是什么?我希望用户像

一样调用该程序
program data_.txt #

其中data_.txt =任何文本文件,#=簇数

1 个答案:

答案 0 :(得分:1)

您可以使用boost :: split()函数(或this method)来获取每行中的条目数。然后,如果你现在有多少条目,你也知道你正在处理多少维度。这也允许您实现简单的输入验证(文件中的常量列数)。

stringstream也有很好的方法,允许按任何空格分割。您可以使用以下内容:

#include <sstream>
#include <vector>
#include <iterator>

template<typename T>
std::vector<T> split(const std::string& line) {
  std::istringstream is(line);
  return std::vector<T>(std::istream_iterator<T>(is), std::istream_iterator<T>());
}

用法:

std::string line = "1.2 3.4 5.6e7";
std::vector<double> vec = split<double>(line);