如果我使用 bool 张量之和,结果永远是 1
Eigen::Tensor<int,2> my_rankx (3,3);
my_rankx.setValues(
{
{1, 2, 3},
{0, 0, 0},
{11, 12, 0}
});
auto number_matrix = (my_rankx.constant(static_cast<int>(0))==my_rankx);
cout<<number_matrix.sum()<<endl; // result of cout is 1
(my_rankx.constant(0) == my_rankx)
是 bool
的张量,将 bool
加在一起会得到 false
或 true
,分别转换为 0
和 1
。 (顺便说一句,问题中的 static_cast<int>(0)
是多余的,因为 0
是 int
类型。)
std::count
与 data()
一起使用:
std::cout << std::count(my_rankx.data(), my_rankx.data() + my_rankx.size(), 0)
<< "\n";
我知道这个答案有点晚了,但我遇到了类似的问题并使用了与当前答案不同的解决方案。
以下对我来说效果很好:
number_matrix.array().cast<int>().sum()
将元素直接转换为整数将避免布尔值的“错误”总和。