我想创建“矢量化”高性能Eigen :: Matrix,用于同时运行多个模拟场景,其中矩阵标量元素将 是双精度矢量而不是双精度数,为这些矢量定义了分量运算。 ArrayXd看起来是这种标量元素的不错选择, 已经定义了组件式操作。作为Eigen的相对新手,我在这方面有一些问题。
将Matrix<类型的两个矩阵相乘时是否正确? ArrayXd,...>,一般来说,没有创建不必要的临时工具 在计算ArrayXd元素的乘积之和时,由于延迟评估了ArrayXd的表达式模板? 鉴于在我们的情况下,在Matrix的“水平”二维切片之间没有相互作用。 ArrayXd,...>,它是最有效的数据表示 在计算速度方面,或者可能是Tensor模块会更好吗?
在创建大型Matrix时管理堆内存分配的可能方法是什么? ArrayXd,...>矩阵
两个Matrix的产品< ArrayXd,...>因运算符*的多次重载而无法编译,给出下面的错误消息。
有没有一种简单的方法可以解决它?
error C2666: 'Eigen::MatrixBase< Derived>::operator *' : 3 overloads have similar conversions
with [ Derived=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1> ]
...\vendor\i686-win32-vc12.0\include\eigen\src\core\generalproduct.h(387): could be 'const Eigen::Product< Derived,Derived,0>
Eigen::MatrixBase< Derived>::operator *< Derived>(const Eigen::MatrixBase< Derived> &) const'
with [ Derived=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1> ]
...\vendor\i686-win32-vc12.0\include\eigen\src\plugins\commoncwisebinaryops.h(50): or
'const Eigen::CwiseBinaryOp< Eigen::internal::scalar_product_op< Eigen::Array< double,-1,1,0,-1,1>,PromotedType>,const Derived,
const Eigen::CwiseNullaryOp< Eigen::internal::scalar_constant_op< Eigen::Array< double,-1,1,0,-1,1>>,const Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>>>
Eigen::MatrixBase< Derived>::operator *< Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>>(const T &) const'
with [PromotedType=Eigen::Array< double,-1,1,0,-1,1>, Derived=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>, T=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>]
...\vendor\i686-win32-vc12.0\include\eigen\src\plugins\commoncwisebinaryops.h(50): or
'const Eigen::CwiseBinaryOp< Eigen::internal::scalar_product_op< Eigen::Array< double,-1,1,0,-1,1>,PromotedType>,
const Eigen::CwiseNullaryOp< Eigen::internal::scalar_constant_op< Eigen::Array< double,-1,1,0,-1,1>>,const Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>>,
const Derived> Eigen::operator *< Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>>(const T &,const Eigen::MatrixBase< Derived> &)'
with [PromotedType=Eigen::Array< double,-1,1,0,-1,1>,Derived=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>,T=Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>]
while trying to match the argument list '(Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>, Eigen::Matrix< Eigen::ArrayXd,-1,-1,0,-1,-1>)'