xtensor:具有特定列值的 Select 行
xtensor: Select rows with specific column values
我正在玩弄 xtensor
,我只想对具有特定列值的 select 行执行一个简单的操作。假设我有以下数组。
[
[0, 1, 1, 3, 4 ]
[0, 2, 1, 5, 6 ]
[0, 3, 1, 3, 2 ]
[0, 4, 1, 5, 7 ]
]
现在我想 select col2
和 col4
的行的值为 3。在本例中为 row 3
。
[0, 3, 1, 3, 2 ]
我想实现类似于this answer has achieved。
如何在 xtensor
中实现此目的?
方法是用您需要的列进行切片,然后查看所有列的条件是否为真。
对于后者,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;
}
我正在玩弄 xtensor
,我只想对具有特定列值的 select 行执行一个简单的操作。假设我有以下数组。
[
[0, 1, 1, 3, 4 ]
[0, 2, 1, 5, 6 ]
[0, 3, 1, 3, 2 ]
[0, 4, 1, 5, 7 ]
]
现在我想 select col2
和 col4
的行的值为 3。在本例中为 row 3
。
[0, 3, 1, 3, 2 ]
我想实现类似于this answer has achieved。
如何在 xtensor
中实现此目的?
方法是用您需要的列进行切片,然后查看所有列的条件是否为真。
对于后者,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;
}