如何计算 eigen::Tensor 中非零的数量<T,2>

问题描述 投票:0回答:2

如果我使用 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
c++ eigen
2个回答
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";

0
投票

我知道这个答案有点晚了,但我遇到了类似的问题并使用了与当前答案不同的解决方案。

以下对我来说效果很好:

number_matrix.array().cast<int>().sum()

将元素直接转换为整数将避免布尔值的“错误”总和。

© www.soinside.com 2019 - 2024. All rights reserved.