Re: [eigen] Custom expression type API stability

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


On Thursday, February 18, 2016 11:04:11 AM Benoit Steiner wrote:
> On Thu, Feb 18, 2016 at 4:46 AM, Dan Čermák <dan.cermak@xxxxxxxxxxxxxxxxxxx>
> wrote:
> > I need basically two different expressions:
> > 
> > 1. given two vectors:
> >         cond_vec and choice_vec -> result(i) = choice_vec(i) if
> > 
> > cond_vec(i) > 0
> > 
> > else choice_vec(i+1)
> > this is rather simple and maybe doable otherwise (and I have already
> > managed
> > that using the 3.3 development version, although it's probably ugly)
> > 
> > 2. calculate reductions of 3d matrices times 2d matrices (they are not
> > stored
> > fully, since they can be calculated fairly easily from e.g. a matrix and a
> > vector, or are highly sparse): result(i) = Sum_j,k M_ijk * K_jk (as a full
> > reduction) or result(i,j) = Sum_k M_ikj * K_kj
> > I would like to create some abstraction where I only need to provide a
> > function which calculates the elements or row/col of the contraction
> > result.
> 
> You can use a tensor contraction code to do this:
> Tensor<float, 3> M(m_dimensions)
> Tensor<float, 3> K(k_dimensions);
> 
> For the first case
> Eigen::array<Eigen::IndexPair<Eigen::DenseIndex>, 2> indices;
> indices[0]= Eigen::IndexPair(1, 0);
> indices[1]= Eigen::IndexPair(2, 1);
> Tensor<float, 1> result = M.contract(K, indices);
> 
> For the second case
> Eigen::array<Eigen::IndexPair<Eigen::DenseIndex>, 1> indices;
> indices[0]= Eigen::IndexPair(1, 0);
> Tensor<float, 2> result = M.contract(K, indices);

I wasn't aware of the tensor module, but I am afraid I cannot really use this, 
since my tensors are expected to have a dimension of up to 1000 while being 
either redundant or highly sparse or cheaply to calculate. But I might end up 
using these for unit tests where problem sizes are drastically reduced, so 
thanks for pointing that out!



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