我正在尝试使用简单条件过滤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视图,其中仅保留那些线条,其中线条的第一个元素大于阈值。
答案 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表达式。