我想使用Eigen 3.3乘以布尔稀疏矩阵。

以下代码在GCC 8.2和Clang 6上编译:

#include <Eigen/Sparse>
#include <iostream>

int main()
{
    Eigen::SparseMatrix<bool> A { 3, 3 };
    Eigen::SparseMatrix<bool> B { 3, 1 };

    A(0, 1) = true;
    A(1, 0) = true;
    A(2, 2) = true;
    B(0, 0) = true;
    B(0, 2) = true;

    std::cout << A * B << std::endl;
    return 0;
}


它打印出我期望的结果,[1 0 1],并且在Clang 6上没有任何警告地进行编译。但是,在GCC 8.2上,我收到以下令人讨厌的警告:

/usr/include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h:65:25: warning: ‘*’ in boolean context, suggest ‘&&’ instead [-Wint-in-bool-context]
       values[i] = x * y;


仅当将稀疏矩阵相乘时,是否有一种方法可以将布尔乘积覆盖为逻辑或&&?还是有其他解决方法?我无法切换到密集矩阵/数组,因为我在真实代码中使用非常大的矩阵。即使出现此警告,此操作的性能也确实不错。

我已经尝试过:


使用Eigen的开发版本中的原始版本:会发出相同的警告;
stackoverflow question中所述的(A * B).template cast<bool>:发出相同的警告;
A && B:引发运行时错误(似乎试图执行标量/系数乘积):Assertion aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols()' failed.

最佳答案

我想您将-Wall用作GCC编译器标志。

您可以通过-Wall -Wno-int-in-bool-context关闭该特定警告

关于c++ - Eigen 3 SpaseMatrix <bool>-GCC 8.2上的SparseMatrix <bool>乘法警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53345496/

10-11 22:48
查看更多