我有一个函数来计算移动平均值:
void MovingAverage(double inputSeries[]
, size_t inputSize, size_t window, float* output ) 我的思路做了我的计算:
vec2DMovingAverage函数获得输出对于第一步,从csv文件中解析2d向量:
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());,但是它不起作用,因为2D向量是std::string类型。
我还尝试了循环:
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);
}
}但它将所有行的所有值附加到向量中。做这件事最好的方法是什么?
发布于 2021-09-24 18:27:24
我尝试过
vector<double> copyRow(vec2D[0].begin(), vec2D[0].end());,但是它不起作用,因为2D向量是字符串类型。
您可以使用来自<algorithm>的算法函数<algorithm>来完成此操作。
由于不能将每一行的第一个元素转换为double,所以可以跳过它,方法是在begin之后从一个元素开始:
#include <algorithm> // std::transform
std::vector<double> copyRow;
// reserve memory for unwanted real locations
copyRow.reserve(vec2D[1].size() - 1u);
std::transform(std::cbegin(vec2D[1]) + 1, std::cend(vec2D[1])
, std::back_inserter(copyRow), [](const auto& ele) {
return std::stod(ele);
});(看演示)
https://stackoverflow.com/questions/69319600
复制相似问题