[eigen] how to create a "virtual" array or matrix?

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

Hi all,

I'd like to create an object that describes an easily-computable
array.  In particular, I want to work with some vectors describing
functions of position.  In order to easily manipulate these, I'd like
to create an object containing the value $|\vec{r}|^2$.  I could, of
course, fill a vector with this value, but that would be a waste of
memory, since it's really cheap to compute.  And these vectors will
eventually end up being quite large (maybe a GB or so), so I'd prefer
not to allocate the memory.  In the past, I'd have just written a loop
to sum over all positions, but that leads to ugly and hard-to-maintain
code, since a non-trivial loop then shows up many times in the code
(there's a bit of trickiness involving finding the Wigner-Seitz cell).
 And it seems that template expressions provide almost precisely what
I want.

Is there a class that does this, e.g. something like

class VirtualMatrix<...? {
   VirtualMatrix(double (*func)(int, int));

which could just take a function of indices and turns it into a matrix?

If there isn't something like this built into eigen, would it be easy
to create? I've tried (briefly) to create a new class deriving
MatrixBase, but immediately ran into trouble.  Perhaps I just know too
little about C++ templates to use eigen effectively.  :(

David Roundy

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