首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在xt::filter中使用相等?

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

Stack Overflow用户
提问于 2021-07-29 22:45:55
回答 2查看 37关注 0票数 2

下面的代码,

代码语言:javascript
复制
#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, 2, 6}, {9, 0, 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’)

但是,其他比较运算符如预期的那样工作(>、<、>=、<=)。我不确定operator==是否是故意不实现的,但是在它实现之前(如果它曾经实现过),有没有替代方法,它是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-30 10:03:47

您可以使用xt::equal(a, b)而不是a == b。也就是说。

代码语言:javascript
复制
xt::filter(a, xt::equal(a, 2)) = 10;

做你想做的。

票数 2
EN

Stack Overflow用户

发布于 2021-07-29 22:55:39

xtensor提供了像&&||这样的逻辑运算符。将这些与允许的比较相结合,将得到与'==‘或'!=’预期的输出相同的结果。

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

所以我的最后一个程序是

代码语言:javascript
复制
#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, 2, 6}, {9, 0, 2}};
    cout << a << endl;
    xt::filter(a, a >= 2 && a <= 2) = 10;
    cout << a << endl;
}

它的输出是

代码语言:javascript
复制
{{ 1.,  2.,  3.},
 { 4.,  2.,  6.},
 { 9.,  0.,  2.}}
{{  1.,  10.,   3.},
 {  4.,  10.,   6.},
 {  9.,   0.,  10.}}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68583581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档