Получить строки из матрицы, предоставив список rowIndices - PullRequest
1 голос
/ 31 октября 2019

Я новичок в 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())

Но это не работает.

1 Ответ

0 голосов
/ 13 ноября 2019

Вам нужно использовать 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(...).

...