Re: [eigen] Map with negative outer stride |

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

On Mon, Feb 2, 2015 at 23:24:40, Chen-Pang He wrote:
> Theoretically a negative stride would work. However, in
> Eigen/src/Core/Stride.h, there is an assertion
>
> eigen_assert(InnerStrideAtCompileTime != Dynamic && OuterStrideAtCompileTime != Dynamic);
There is also
eigen_assert(innerStride>=0 && outerStride>=0);
in the constructor.
> Because Dynamic is defined as -1 in
> Eigen/src/Core/util/Constants.h, this prevents OuterStride<-1>
> from working. Other negative strides such as OuterStride<-2>
> are OK.
To sum up, with assertions, only compile-time negative strides
work, and the stride cannot be -1.
> I am unsure if disabling assertions is a good idea. If you want
> to disable assertions, #define EiGEN_NO_DEBUG.
The following is my test.
#define EIGEN_NO_DEBUG // Disable eigen_assert
#include <Eigen/Core>
#include <iostream>
int main()
{
using namespace Eigen;
int data[] = { 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6 };
std::cout << Map<Matrix<int, 6, 6>, 0, OuterStride<-1> >(data + 5, 6, 6)
<< std::endl;
}
Cheers again,
Chen-Pang
> On Mon, Feb 2, 2015 at 13:52:40, Matwey V. Kornilov wrote:
> > Hi,
> >
> > I have an Vector: {1,2,3,4,5,6}
> > And I need to construct a matrix of the special form it:
> >
> > 1 0 0 0 0 0
> > 2 1 0 0 0 0
> > 3 2 1 0 0 0
> > 4 3 2 1 0 0
> > 5 4 3 2 1 0
> > 6 5 4 3 2 1
> >
> > Is there a simple way to do that through mapings?