2

我正在玩xtensor,我只是想执行一个简单的操作来选择具有特定列值的行。想象一下我有以下数组。

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

现在我想选择col2col4值为 3 的行。在这种情况下是row 3

  [0, 3, 1, 3, 2 ]

我想达到类似于这个答案所达到的效果

我怎样才能做到这一点xtensor

4

1 回答 1

1

要走的路是用您需要的列进行切片,然后查看所有列的条件在哪里成立。

对于后者,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;
}
于 2019-11-13T10:20:03.113 回答