Boost logo

Boost :

From: Toon Knapen (toon.knapen_at_[hidden])
Date: 2002-01-18 09:25:35


Looking at the slicing and ranging possibilities of both multi_array and
ublas, I find the concepts as they are currently defined overlapping and
limited in respect to e.g. Blitz++.

The most important difference with Blitz++ is that slicing in Blitz++
speak means also reducing the order of the array. In ublas &
multi_array, slicing means a 'strided range'. I think it is important to
define concepts in conformance with Blitz++ as it's still one of the
default array libraries out there.

But another concept I'm missing, and which is in neither of the three
libraries, is creating a sub-array (of the same order as the array) that
contains a specific selection of indices for every dimension of the
array. e.g. in the 2D case I would like to do
matrix< double > A(8,8);
boost::array<3> i1 = { 0,1,6 };
boost::array<5> i2 = { 5,6,7 };
sub_matrix sub_A = submatrix(A, i1,i2 );

where sub_A contains all element that are in columns 5,6 and 7 and in
rows 0,1 and 6. The difference with a range is thus that this sub-array
is not a continuous block in the original array. The diff with the
current definition of slicing is that the selection does not need to be
strided.

Is there a reason this kind of subarray does not exist ? With this kind
of functionality though, I would never have to write loops over my
matrices again as I currently rely on ublas to do this for me.
Currently, my only loop is for assembling my FEM matrix from all local
element matrices which comes down basically to assigning a sub-array
with non-strided indices.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk