c++ - 选择 2D xtensor 的特定行

标签 c++ xtensor

xtensor 的文档提供了 numpy 功能的映射 ( link )。

该列表涵盖了许多用例,但有一个功能我无法重新创建。我有一个 2D 张量,我想选择由运行时构建的序列标识的特定行。我的理解是,这阻止了 xt::drop 和 xt::keep 的使用,因为它们是可变参数模板函数(我刚刚开始学习 c++,所以如果我遗漏了什么,请纠正我)。而且,该序列是不规则的,无法通过 xt::range 复制。

这是我在 numpy 中想要的内容:

import numpy as np
row = 10
col = 3
array = np.arange(row*col).reshape([row, col])
chosen_rows = [0, 2, 3, 9] # imagine this is not known at compile time

subset_array = array[chosen_rows, :]

我找到了相关帖子: Filtering multidimensional views in xtensor

这里用于选择行的标准是基于矩阵本身的元素,而在我的例子中,该标准是外部的。我可以向表示行索引的矩阵添加一行,但我希望避免这种情况。顺便说一句,上述帖子日期和 xtensor 自此发生了变化,因此如果您对上述帖子有改进的答案,我很乐意阅读。

最佳答案

如果我理解的话,你的担心是没有根据的。在编译时,必须知道chosen_rows的类型,但如果其内容保持动态就完全没问题。

您在xtensor中的示例:

#include <xtensor/xtensor.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>

int main()
{
    size_t row = 10;
    size_t col = 3;
    xt::xtensor<size_t,2> array = xt::arange<size_t>(row*col).reshape({row, col});
    xt::xtensor<size_t,1> chosen_rows = {0, 2, 3, 9};
    auto subset_array = xt::view(array, xt::keep(chosen_rows), xt::all());
    std::cout << subset_array << std::endl;
    return 0;
}

关于c++ - 选择 2D xtensor 的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61470198/

相关文章:

c++ - 将 svg 转换为图像的库?

c++ - 不确定如何解释我的并行矩阵乘法代码的一些性能结果

c++ - 通过提供 rowIndices 列表从矩阵中获取行

c++ - xtensor:将 View 分配给 double

numpy - xtensor 相当于 numpy a[a>3] = 1

c++ - 将csv字符串读入 vector C++

c++ - 调用 end() 时出现 std::multimap 错误

c++ - 与 kill 一起发送到父线程的信号是否保证在下一条语句之前得到处理?

c++ - xtensor - `xshared_expression` 无法接受 xfunction xexpression

Numpy vs Eigen vs Xtensor 线性代数基准奇数