Boost logo

Boost :

From: jhrwalter (walter_at_[hidden])
Date: 2002-01-19 10:20:55


--- In boost_at_y..., Toon Knapen <toon.knapen_at_s...> wrote:
> 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.

A slice in ublas is conforming to the valarray slice ;-). A range is
the specialization of a slice with stride = 1. As we intentionally
chose to distinguish vectors and matrices (and *not* to model vectors
as m x 1 or 1 x n matrices) we needed to introduce different proxy
classes for order reduction.
 
To cite the Blitz++ documentation w.r.t. it's current
status: ,Blitz++ currently provides dense vectors and
multidimensional arrays. Some other features (matrices, random number
generators) are partially implemented.'
 
> 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 ?
 
Interesting question. Should this sub matrix support dense matrices
only or sparse matrices also (the old question of genericity ;-)?
 
> 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.
 
Sounds rather cool. Would you like to post some sample code?
 
Regards
 
Joerg
 


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