首页 > 解决方案 > 如何读取从调用 xt::load_csv() 返回的 xtensor 'xexpression' 对象的元素?

问题描述

我的代码是:

#include <istream>
#include <fstream>
#include <xtensor/xcsv.hpp>

int main()
{
    std::ifstream in_file; 
    in_file.open("csv_file.csv"); 
    auto data = xt::load_csv<std::string>(in_file); 

    return 0;
}

当我在 IDE 中检查xt::xexpression对象data时,它的尺寸和填充正确,但我找不到在代码中读取其元素的方法。

在仔细阅读xtensor文档之后,我并不明智......也许指向xtensor的良好介绍的指针可能会回答这个问题。

标签: c++xtensor

解决方案


阅读后,data它只是一个xarray: 一个多维数组,或者在 CSV 的情况下通常是一个矩阵。在矩阵上,您可以像在 NumPy 中那样操作。例如:

  • <<允许您打印。
  • operator()(...)允许您使用行和列索引获取项目。
  • xt::view(data, ...)允许您获得“切片”。

更具体地考虑这个例子:

#include <istream>
#include <fstream>
#include <iostream>
#include <xtensor/xarray.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>
#include <xtensor/xcsv.hpp>

int main()
{
    std::ifstream in_file;
    in_file.open("csv_file.csv");
    auto data = xt::load_csv<int>(in_file);

    std::cout << data << std::endl;
    std::cout << data(0, 0) << std::endl;
    std::cout << data(0, 1) << std::endl;
    std::cout << xt::view(data, 0, xt::all()) << std::endl;
}

用于以下 CSV 文件

1,2,3
4,5,6
7,8,9

印刷:

{{1, 2, 3},
 {4, 5, 6},
 {7, 8, 9}}
1
2
{1, 2, 3}

推荐阅读