我想使用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/