Re: [eigen] Question about ColMajor vs. RowMajor |

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

*To*: "eigen@xxxxxxxxxxxxxxxxxxx" <eigen@xxxxxxxxxxxxxxxxxxx>*Subject*: Re: [eigen] Question about ColMajor vs. RowMajor*From*: Michael Dixon <mdixon@xxxxxxxxxxxxxxxx>*Date*: Sat, 17 Dec 2011 12:02:10 -0800

Awesome. Thanks, that makes perfect sense. Sent from my iPhone On Dec 17, 2011, at 7:21 AM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote: > 2011/12/16 Michael Dixon <mdixon@xxxxxxxxxxxxxxxx>: >> Hi, >> >> My colleagues and I were recently playing around with changing the >> default for matrices from ColMajor to RowMajor, and we found that >> doing so changed the behavior of the () operator. Specifically, when >> accessing a two-dimensional matrix with a single index (e.g., mat(i) >> ), the ColMajor/RowMajor flag affects which element of the matrix gets >> indexed as the ith. Our assumption had been that changing the >> ColMajor/RowMajor flag would be completely transparent, which is to >> say, it would affect the underlying storage (and thus the >> performance/efficiency), but it wouldn't change the overall behavior >> of the code. > > This is mostly true, but it doesn't apply to the few parts of the API > that are explicitly about low-level addressing of the underlying array > of coefficients as a single-dimensional array. operator(index) is like > that. It is meant for use cases where you just want to iterate over > coefficients in the most memory-local way, and don't care if that > means col-major or row-major iteration. > >> I was just wondering whether the altered behavior of the >> () operator was intended (in which case, our assumption of >> transparency was incorrect), or whether this was an unintended bug. > > This behavior is intended and not considered 'altered', it just plays > at a lower level than where the notions of "col-major" vs "row-major" > storage exist. > > Maybe we'd need to document that more clearly, but it's already > explained on page 1 of the tutorial: > http://eigen.tuxfamily.org/dox/TutorialMatrixClass.html > > "Note that the syntax m(index) is not restricted to vectors, it is > also available for general matrices, meaning index-based access in the > array of coefficients. This however depends on the matrix's storage > order." > > We need to have class API docs inherit base classes so that they are > more usable, and then put a similar explanation there. > > Cheers, > Benoit > >> >> Thanks, >> Michael >> >> P.S. In case my description of the problem was a little unclear, I'm >> also attaching a small program that demonstrates the change in >> behavior. > >

**References**:**[eigen] Question about ColMajor vs. RowMajor***From:*Michael Dixon

**Re: [eigen] Question about ColMajor vs. RowMajor***From:*Benoit Jacob

**Messages sorted by:**[ date | thread ]- Prev by Date:
**[eigen] Tridiagonal Matrices** - Next by Date:
**[eigen] strange SSE2 impact on Vector::array and Array** - Previous by thread:
**Re: [eigen] Question about ColMajor vs. RowMajor** - Next by thread:
**Re: [eigen] Question about ColMajor vs. RowMajor**

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