在Xtensor中过滤多维视图

时间:2018-07-06 08:38:58

标签: c++ xtensor

我正在尝试使用简单条件过滤2D xtensor视图。我找到了xt :: filter函数,但是当我使用它时,它仅返回过滤视图的第一列。我需要2D过滤视图。最好的方法是什么?

我可以逐行检查条件,并自己获取所有索引,并使用xt :: view仅显示所需的行,但是我希望使用xtensor工具集以更复杂的方法进行操作。

我当前的过滤器,它仅返回一个方向,如下所示:

auto unfiltered = xt::view(...);
auto filtered = xt::filter(unfiltered,  xt::view(unfiltered, xt::all(), 0) > tresh);

编辑:

可能我还不太清楚。我需要一个2D视图,其中仅保留那些线条,其中线条的第一个元素大于阈值。

1 个答案:

答案 0 :(得分:1)

xt::view(unfiltered, xt::all(), 0)

正在创建一个仅包含未过滤第一列的视图。以下应该可以满足您的期望:

auto unfiltered = xt::view(...);
auto filtered = xt::filter(unfiltered, unfiltered > tresh);

编辑:对不起您的误会,以下是OP备注之后的更新:

条件不会广播到要过滤的表达式的形状,目前的解决方法是:

auto unfiltered = xt::view(...);
auto filtered = xt::filter(unfiltered,
                           xt::broadcast(xt::view(unfiltered, xt::all(), 0, xt::newaxis()),
                                         unfiltered.shape()) > tresh);

我为此打开一个问题。

还要注意,filter返回一个1D表达式(因为满足条件的元素可能分散在原始表达式中),因此您需要对其进行重塑以获得2D表达式。