gpt4 book ai didi

带有 Boost 库的 C++。读书专栏。 Excel/CSV文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:59 25 4
gpt4 key购买 nike

我正在阅读包含 3 列的 CSV。我需要在每一列上执行均值、var 和 std 计算。我能够获得第一列的输出,但不知道如何打印所有 3 列。谢谢。

我尝试添加 ','行后在while (getline(inNew, line, ','))
但这对我不起作用

int main()
{
ifstream inNew("C:/Users/A.csv");
accumulator_set<double, stats<tag::mean, tag::variance >> acc;
if (inNew)
{
string line;
while (getline(inNew, line))
{
acc(stod(line));
}
cout << "Expected return is: " << mean(acc) << std::endl;
cout << "Variance: " << variance(acc) << std::endl;
cout << "Std Dev: " << sqrt(variance(acc)) << std::endl;
}

inNew.close();

system("pause");
return 0;
}

最佳答案

因为您已经在使用 boost,请使用 boost::split将每一行拆分成它的列。然后分别累加每一列。每列都需要一个 accumulator_set

代码可能看起来像这样:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>

#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/mean.hpp>
#include <boost/accumulators/statistics/variance.hpp>
#include <boost/algorithm/string.hpp>

int main()
{
using namespace std;
using namespace boost;
using namespace boost::accumulators;

ifstream inNew("C:/Users/A.csv");
size_t columns = 3;
vector<accumulator_set<double, stats<tag::mean, tag::variance>>> acc(columns);

if (inNew)
{
string line;
while (getline(inNew, line))
{
vector<string> strs;
split(strs, line, is_any_of("\t ,"));
if (strs.size() == columns)
{
for (size_t i = 0; i < columns; ++i)
{
acc[i](stod(strs[i]));
}
}
}

for (size_t i = 0; i < columns; ++i)
{
cout << "Stats for column " << (i + 1) << endl;
cout << "Expected return is: " << mean(acc[i]) << endl;
cout << "Variance: " << variance(acc[i]) << endl;
cout << "Std Dev: " << sqrt(variance(acc[i])) << endl;
}
}

inNew.close();

system("pause");
return 0;
}

当然,您可以通过不对列数进行硬编码来使其更加精美和稳健。

关于带有 Boost 库的 C++。读书专栏。 Excel/CSV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com