微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 xt::filter 中使用相等性?

如何解决如何在 xt::filter 中使用相等性?

下面的代码

#include <iostream>

#include "xtensor/xadapt.hpp"
#include "xtensor/xarray.hpp"
#include "xtensor/xindex_view.hpp"
#include "xtensor/xio.hpp"
#include "xtensor/xmasked_view.hpp"
#include "xtensor/xview.hpp"

using namespace std;

int main() {
    xt::xarray<float> a = {{1,2,3},{4,6},{9,2}};
    cout << a << endl;
    xt::filter(a,a == 2) = 10;
    cout << a << endl;
}

使用以下内容编译失败:error: no match for ‘operator==’ (operand types are ‘xt::xarray<float>’ ... and ‘int’)

但是,其他比较运算符按预期工作(>、=、

解决方法

您可以使用 xt::equal(a,b) 代替 a == b。即

xt::filter(a,xt::equal(a,2)) = 10;

做你想做的事。

,

xtensor 提供了 &&|| 等逻辑运算符。将这些与允许的比较相结合会产生与“==”或“!=”预期相同的输出。

特别是 a >= 2 && a <= 2 a == 2a > 2 || a < 2 a != 2

所以我的最终程序是

#include <iostream>

#include "xtensor/xadapt.hpp"
#include "xtensor/xarray.hpp"
#include "xtensor/xindex_view.hpp"
#include "xtensor/xio.hpp"
#include "xtensor/xmasked_view.hpp"
#include "xtensor/xview.hpp"

using namespace std;

int main() {
    xt::xarray<float> a = {{1,2,3},{4,6},{9,2}};
    cout << a << endl;
    xt::filter(a,a >= 2 && a <= 2) = 10;
    cout << a << endl;
}

它的输出是

{{ 1.,2.,3.},{ 4.,6.},{ 9.,0.,2.}}
{{  1.,10.,{  4.,{  9.,10.}}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。