Re: [eigen] Forcing a conversion to ColMajor |

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] Forcing a conversion to ColMajor*From*: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>*Date*: Mon, 30 Jul 2012 10:00:30 +0200*Dkim-signature*: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=ZH0wQpuSnXE7H4X4mVz+74CkZxoeKdMgC/guGAmF/0Y=; b=zqX7UOBoLYQ9wWD1UUEpyPWW3/G2hwTm6u/+JtW6d3DUIuUCYwwot/pAUONnU4j6EA ACPsoibWr/UA3VfFM04YXhq+IS7qLgyoE0Ahi9SOmrDc+yqzfdLVgE5NR3T4ZplIOldP K4vRQSg7cLUCJR/hbLwN8p//qmbcvniPYRE6Yf/V7RNykUElRDvUnS9PNUBqqOS/8jqE P8lftvarRdfcAMrp46ifjT5nvlbESHvh9aS6k/9nfBP6h8WPwu5tvUDOgVl+bFN5LcFr b8vMvLaTqZ+gNRU4cClW4OZQLXs/BX+3VpmfIom9SphOSAHS90ylZRY1lnrEOXedOJYW LWOA==

hi, I think you can simply drop the explicit ColMajor: typename Eigen::internal::conditional<T::IsRowMajor, Eigen::Matrix<typename T::Scalar, T::RowsAtCompileTime,T::ColsAtCompileTime>, const T&>::type objCopy(obj); gael On Sat, Jul 28, 2012 at 8:12 PM, Douglas Bates <bates@xxxxxxxxxxxxx> wrote: > On Sat, Jul 28, 2012 at 12:40 PM, Douglas Bates <bates@xxxxxxxxxxxxx> wrote: >> On Sat, Jul 28, 2012 at 12:11 PM, Douglas Bates <bates@xxxxxxxxxxxxx> wrote: >>> On Sat, Jul 28, 2012 at 2:52 AM, Gael Guennebaud >>> <gael.guennebaud@xxxxxxxxx> wrote: >>>> Hi, >>>> >>>> you could do something like: >>>> >>>> typename Eigen::internal::conditional<T::IsRowMajor, >>>> Eigen::Matrix<typename T::Scalar, >>>> T::RowsAtCompileTime,T::ColsAtCompileTime,ColMajor>, >>>> const T&>::type objCopy(obj); >>>> >>>> and then use objCopy instead. If T is column major, then objCopy will >>>> just be an alias (const ref). >>> >>> Thanks for the suggestion. That version fails with an >>> INVALID_MATRIX_TEMPLATE_PARAMETERS error when trying to do the objCopy >>> on a row-major object. >>> >>> ./include/Eigen/src/Core/Matrix.h:280:13: note: in instantiation of >>> member function >>> 'Eigen::PlainObjectBase<Eigen::Matrix<std::complex<double>, 1, -1, 0, >>> 1, -1> >::_check_template_params' requested here >>> Base::_check_template_params(); >>> ^ >>> ./include/RcppEigenWrap.h:89:31: note: in instantiation of function >>> template specialization 'Eigen::Matrix<std::complex<double>, 1, -1, 0, >>> 1, -1>::Matrix<Eigen::Matrix<std::complex<double>, 1, -1, 1, 1, -1> >' >>> requested here >>> const T&>::type objCopy(obj); >>> >>> I think this is triggered by an object of the form >>> >>> Eigen::RowVectorXcd::Zero(5) >>> >>> and my guess is that the condition failing is >>> >>> EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, >>> (Options&RowMajor)==RowMajor) >> >> Probably I should just trap the case of MaxRowsAtCompileTime == 1 >> because there really is no difference between row-major and >> column-major in terms of the object returned to R. > > The last part of that sentence was for the case of > MaxRowsAtCompileTime == 1. Of course I have since found out that I > need to catch that case at compile time, not run time, for which I > will need to do more template metaprogramming than I have done in the > past. > >

**Follow-Ups**:**Re: [eigen] Forcing a conversion to ColMajor***From:*Douglas Bates

**References**:**[eigen] Forcing a conversion to ColMajor***From:*Douglas Bates

**Re: [eigen] Forcing a conversion to ColMajor***From:*Gael Guennebaud

**Re: [eigen] Forcing a conversion to ColMajor***From:*Douglas Bates

**Re: [eigen] Forcing a conversion to ColMajor***From:*Douglas Bates

**Re: [eigen] Forcing a conversion to ColMajor***From:*Douglas Bates

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] Contributor approval for the MPL2 relicensing (YOUR ACTION NEEDED)** - Next by Date:
**Re: [eigen] Forcing a conversion to ColMajor** - Previous by thread:
**Re: [eigen] Forcing a conversion to ColMajor** - Next by thread:
**Re: [eigen] Forcing a conversion to ColMajor**

Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |