xtensor: выбор строк с конкретными значениями столбцов - PullRequest
1 голос
/ 05 ноября 2019

Я играю с xtensor, и я просто хотел выполнить простую операцию, чтобы выбрать строки с конкретными значениями столбцов. Представьте, что у меня есть следующий массив:

[ 
  [0, 1, 1, 3, 4 ]
  [0, 2, 1, 5, 6 ]
  [0, 3, 1, 3, 2 ]
  [0, 4, 1, 5, 7 ]
]

Теперь я хочу выбрать строки, в которых col2 и col4 имеют значение 3. В данном случае это row 3.

  [0, 3, 1, 3, 2 ]

Я хочу добиться того же, чего достиг этого ответа .

Как мне добиться этого в xtensor?

1 Ответ

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

Для этого нужно нарезать нужные столбцы и посмотреть, где выполняется условие для всех столбцов.

Для последнего перегрузка для xt::all(...), по-видимому, не реализована (пока! ), но мы можем использовать xt::sum(..., axis) для достижения того же:

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

int main()
{
  xt::xtensor<int,2> a =
    {{0, 1, 1, 3, 4},
     {0, 2, 1, 5, 6},
     {0, 3, 1, 3, 2},
     {0, 4, 1, 5, 7}};

  auto test = xt::equal(xt::view(a, xt::all(), xt::keep(1, 3)), 3);
  auto n = xt::sum(test, 1);
  auto idx = xt::flatten_indices(xt::argwhere(xt::equal(n, 2)));

  auto b = xt::view(a, xt::keep(idx), xt::all());

  std::cout << b << std::endl;

  return 0;
}
...