在 xtensor 中过滤多维视图

Filtering multidimensional views in xtensor

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

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

我当前的过滤器,return只有一个方向,如下所示:

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

编辑:

可能我没有完全清楚。我需要一个 2D 视图,其中我只保留那些线,其中线的第一个元素大于阈值。

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);

我会为此打开一个问题。

另外注意过滤returns一个一维表达式(因为满足条件的元素可能散落在原表达式中),需要reshape得到一个二维表达式