首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将二维字符串向量的一行提取为双向量?

如何将二维字符串向量的一行提取为双向量?
EN

Stack Overflow用户
提问于 2021-09-24 18:22:16
回答 1查看 323关注 0票数 1

我有一个函数来计算移动平均值:

代码语言:javascript
复制
void MovingAverage(double inputSeries[]
                 , size_t inputSize, size_t window, float* output ) 

我的思路做了我的计算:

  1. 构造一个循环并每次提取一行vec2D
  2. 使用MovingAverage函数获得输出

对于第一步,从csv文件中解析2d向量:

代码语言:javascript
复制
std::vector<std::vector<std::string>> vec2D{
    {"S0001","01","02","03"}, {"S0002","11","12","13"}, {"S0003","21","22","23"}
};

我想提取这个二维向量的一行(比如第二行),并将该行存储为一维向量std::vector<double> copyRow,然后计算每一行的移动平均值。

代码语言:javascript
复制
copyRow = {11,12,13}

我尝试过vector<double> copyRow(vec2D[0].begin(), vec2D[0].end());,但是它不起作用,因为2D向量是std::string类型。

我还尝试了循环:

代码语言:javascript
复制
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);
    }
}

但它将所有行的所有值附加到向量中。做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-24 18:27:24

我尝试过vector<double> copyRow(vec2D[0].begin(), vec2D[0].end());,但是它不起作用,因为2D向量是字符串类型。

您可以使用来自<algorithm>的算法函数<algorithm>来完成此操作。

由于不能将每一行的第一个元素转换为double,所以可以跳过它,方法是在begin之后从一个元素开始:

代码语言:javascript
复制
 #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);
    });

(看演示)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69319600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档