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

Get rows from a matrix by providing a list of rowIndices

本文关键字:获取 列表 rowIndices      更新时间:2023-10-16

我是xtensor的初学者,目前正在从数组列表中获取行。

我有下面的矩阵。

auto matrix = {{  0.,   1.,   0.,   1.,   1.,   1.,   1.},
{  1.,   2.,   0.,   1.,   3.,   1.,   1.},
{  2.,   3.,   0.,   2.,   7.,   0.,   0.},
{  3.,   4.,   0.,   1.,  11.,   0.,   1.},
{  4.,   0.,   1.,   1.,   0.,   0.,   0.}}

我想从这个矩阵中选择以下几行。

xt::xarray<int> rowIndices = { 1, 2, 3, 4 }

现在我想使用这个rowIndices数组来获得一个包含所有行的子矩阵。我怎样才能做到这一点?

我尝试了以下方法。

xt::view(matrix, rowIndices, xt::all())

但这行不通。

您需要使用xt::keep(...)按索引选择行。

完整示例:

#include <xtensor/xtensor.hpp>
#include <xtensor/xview.hpp>
#include <xtensor/xio.hpp>
int main()
{
xt::xtensor<double,2> a =
{{  0.,   1.,   0.,   1.,   1.,   1.,   1.},
{  1.,   2.,   0.,   1.,   3.,   1.,   1.},
{  2.,   3.,   0.,   2.,   7.,   0.,   0.},
{  3.,   4.,   0.,   1.,  11.,   0.,   1.},
{  4.,   0.,   1.,   1.,   0.,   0.,   0.}};
xt::xtensor<size_t,1> rowIndices = { 1, 2, 3, 4 };
auto v = xt::view(a, xt::keep(rowIndices), xt::all());
std::cout << v << std::endl;
return 0;
}

打印:

{{  1.,   2.,   0.,   1.,   3.,   1.,   1.},
{  2.,   3.,   0.,   2.,   7.,   0.,   0.},
{  3.,   4.,   0.,   1.,  11.,   0.,   1.},
{  4.,   0.,   1.,   1.,   0.,   0.,   0.}}

请注意,根据文档,在视图中,您还可以使用xt::range(...)xt::all()xt::newaxis()xt::keep(...)xt::drop(...)