C++ 如何有效地将布尔矩阵乘以特征值为3的双向量?

C++ 如何有效地将布尔矩阵乘以特征值为3的双向量?,c++,casting,matrix-multiplication,eigen3,C++,Casting,Matrix Multiplication,Eigen3,我想计算r=A*b,其中A是一个包含大约一半0和一半1的矩阵,b是一个双向量 MatrixXd Ad; MatrixXb Ab; // bool matrix VectorXd b, r; 我试过: 1) Ad * b 2) r(k)=Ab.row(k).transpose().array().select(b,0).sum() 3) Ab.cast<double>() * b 4) Ab.cast<double>().sparseView() * b 1)Ad*b

我想计算r=A*b,其中A是一个包含大约一半0和一半1的矩阵,b是一个双向量

MatrixXd Ad;
MatrixXb Ab; // bool matrix
VectorXd b, r;
我试过:

1) Ad * b 
2) r(k)=Ab.row(k).transpose().array().select(b,0).sum()
3) Ab.cast<double>() * b
4) Ab.cast<double>().sparseView() * b
1)Ad*b
2) r(k)=Ab.row(k).transpose().array().select(b,0).sum()
3) Ab.cast()*b
4) Ab.cast().sparseView()*b
1比2、3和4快,尽管2似乎效率最高。A在我的项目中很大(>10k*1000k),所以我不想使用1

有没有比用特征值3计算a*b更有效的方法


谢谢大家!

您也可以尝试
Ab.cast().lazyProduct(b)
。如果方法1更快,我假设它不包括从
bool
double
的转换。您也可以尝试
Ab.cast().lazyProduct(b)
。如果方法1更快,我假设它不包括从
bool
double
的转换?