Eigen
3.3.5

Expression of a diagonal/subdiagonal/superdiagonal in a matrix.
MatrixType  the type of the object in which we are taking a sub/main/super diagonal 
DiagIndex  the index of the sub/super diagonal. The default is 0 and it means the main diagonal. A positive value means a superdiagonal, a negative value means a subdiagonal. You can also use DynamicIndex so the index can be set at runtime. 
The matrix is not required to be square.
This class represents an expression of the main diagonal, or any sub/super diagonal of a square matrix. It is the return type of MatrixBase::diagonal() and MatrixBase::diagonal(Index) and most of the time this is the only way it is used.
Inherits type< Diagonal< MatrixType, _DiagIndex > >.