【发布时间】:2021-11-18 00:12:48
【问题描述】:
我有一个计算移动平均线的函数:
void MovingAverage(double inputSeries[]
, size_t inputSize, size_t window, float* output )
我的计算思路:
- 构造一个循环,每次提取一行
vec2D - 使用
MovingAverage函数获取输出
第一步,从 csv 文件中解析二维向量:
std::vector<std::vector<std::string>> vec2D{
{"S0001","01","02","03"}, {"S0002","11","12","13"}, {"S0003","21","22","23"}
};
我想提取这个二维向量的一行(比如第二个)并将该行存储为一维向量std::vector<double> copyRow,然后计算每一行的移动平均值。
copyRow = {11,12,13}
我尝试了vector<double> copyRow(vec2D[0].begin(), vec2D[0].end());,但它不起作用,因为二维向量是std::string 类型。
我也试过 for 循环:
int rowN = vec2D.size();
int colN = vec2D[0].size();
double num;
for (int i = 0; i < rowN; i++)
{
for (int j = 0; j < colN; j++)
{
num = stod(vec2D[i][j]);
copyRow[i][j].push_back(num);
}
}
但是它将所有行中的所有值附加到向量中。最好的方法是什么?
【问题讨论】:
-
而且由于行数太多,每一行我都必须进行计算,我不想只使用一个循环并指定行索引来这样做
-
我编辑了我的问题,谢谢@JaMiT
-
我想提取这个二维向量的一行(比如第二个)并将该行存储为一维向量——听起来你正在给我们你的解决方案,并且试图让您的解决方案发挥作用。也许在高层次上描述一下,你想解决什么问题?也许有更好的方法来实现您想要实现的任何目标。
-
@Cyan "对于每一行我必须进行计算," -- 这似乎是将您的 2D
string数据转换为 2Ddouble的原因数据,而不是提取单行数据。这让我认为,也许您应该提供更多背景信息,以便我们更好地了解您所面临的限制(并更好地了解您的目标,正如 PaulMcKenzie 建议的那样)。 -
@JaMiT 是的,实际上我想计算每一行的移动平均值。我编辑了我的问题
标签: c++ algorithm c++11 stdvector stdstring