下面的代码,
#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==是否是故意不实现的,但是在它实现之前(如果它曾经实现过),有没有替代方法,它是什么?
发布于 2021-07-30 10:03:47
您可以使用xt::equal(a, b)而不是a == b。也就是说。
xt::filter(a, xt::equal(a, 2)) = 10;做你想做的。
发布于 2021-07-29 22:55:39
xtensor提供了像&&和||这样的逻辑运算符。将这些与允许的比较相结合,将得到与'==‘或'!=’预期的输出相同的结果。
特别是a >= 2 && a <= 2 <=> a == 2和a > 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, 2, 6}, {9, 0, 2}};
cout << a << endl;
xt::filter(a, a >= 2 && a <= 2) = 10;
cout << a << endl;
}它的输出是
{{ 1., 2., 3.},
{ 4., 2., 6.},
{ 9., 0., 2.}}
{{ 1., 10., 3.},
{ 4., 10., 6.},
{ 9., 0., 10.}}https://stackoverflow.com/questions/68583581
复制相似问题