在张量中过滤多维视图

Filtering multidimensional views in xtensor

本文关键字:视图 过滤 张量中      更新时间:2023-10-16

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

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

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

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

我将为此打开一个问题。

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