矢量化Eigen :: Matrix

时间:2017-12-15 20:30:56

标签: eigen

我想创建“矢量化”高性能Eigen :: Matrix,用于同时运行多个模拟场景,其中矩阵标量元素将 是双精度矢量而不是双精度数,为这些矢量定义了分量运算。 ArrayXd看起来是这种标量元素的不错选择, 已经定义了组件式操作。作为Eigen的相对新手,我在这方面有一些问题。

  1. 将Matrix<类型的两个矩阵相乘时是否正确? ArrayXd,...>,一般来说,没有创建不必要的临时工具 在计算ArrayXd元素的乘积之和时,由于延迟评估了ArrayXd的表达式模板? 鉴于在我们的情况下,在Matrix的“水平”二维切片之间没有相互作用。 ArrayXd,...>,它是最有效的数据表示 在计算速度方面,或者可能是Tensor模块会更好吗?

  2. 在创建大型Matrix时管理堆内存分配的可能方法是什么? ArrayXd,...>矩阵

  3. 两个Matrix的产品< ArrayXd,...>因运算符*的多次重载而无法编译,给出下面的错误消息。

  4. 有没有一种简单的方法可以解决它?

    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>)'
    

0 个答案:

没有答案