extensor:选择具有特定列值的行

xtensor: Select rows with specific column values

本文关键字:选择 extensor      更新时间:2023-10-16

我在玩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中实现这一点?

方法是对所需的列进行切片,然后查找所有列的条件为true的位置。

对于后者,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;
}