I agree that adding an overload for M.diagonal().setRandom() and
M.diagonal().setOnes() etc. for DiagonalMatrix might be convenient. I
opened an issue for this https://gitlab.com/libeigen/eigen/-/issues/2028



On Tue, Oct 20, 2020 at 2:50 AM Matthias Peschke <
[email protected]> wrote:

> Hi Adrien,
>
> thanks for the quick answer!
>
> As you said, there are workarounds but I have a library which has an Eigen
> type as its basic storage. Its actually a template<typename MatrixType> and
> I have use cases for Dense, Sparse and (rarely) for Diagonal matrices. So I
> would need to handle all these workaround cases with a if constexpr() to be
> able to compile the code for the different matrix types. Thus, it would be
> more convenient if at least the most common operations are present for
> DiagonalMatrix.
> Best regards,
>
> Matthias
>
>
> On 10/20/20 10:15 AM, Adrien Escande wrote:
>
> Hi Matthias,
>
> I can't be sure of the real reasons for that, but my take is that:
>  - the methods you are referring to are not meaningful at the level of the
> common base class for DiagonalMatrix and Matrix (i.e. EigenBase), so they
> are not implemented there and DiagonalMatrix does not inherit them
>  - there are easy workarounds to achieve the same goal, that are usually
> as efficient as a special implementation would be.
>
> In your case, you can achieve what you want with:
>
>     DiagonalMatrix<double, Dynamic> M(10);
>     M.diagonal().setOnes();
>     std::cout << M.toDenseMatrix() << std::endl;
>
> Idem for M.diagonal().setRandom()
>
> Best regards,
> Adrien
>
>
> On Tue, Oct 20, 2020 at 4:38 PM Matthias Peschke <
> [email protected]> wrote:
>
>> I recently start using the type Eigen::DiagonalMatrix but it seems that
>> some methods for this type are missing. This includes the stream
>> operator which is not present so that the following does not compile:
>>
>>          Eigen::DiagonalMatrix<double,-1> M(10); M.setIdentity();
>>          std::cout << M << std::endl;
>>
>> Another example is setRandom() which is not implemented and there are no
>> block operations present.
>>
>> Is there a special reason for this or it is because
>> Eigen::DiagonalMatrix is rarely used?
>>
>> Best regards,
>> Matthias
>>
>>
>>
>>

Reply via email to