Re: [eigen] Best way of initializing a matrix of fixed size

```On 2017-03-08 18:02, Matthieu Brucher wrote:
```
```Well, the elements are not simple numbers, they are results of different
expressions like these:
https://github.com/mbrucher/AudioTK/blob/master/ATK/Preamplifier/Triode2Filter.cpp#L85
```
```
Some suggestions (no guarantee that any of them will work in your case):
```
* For a Vector4d (or Vector4f or anything smaller) you can also use the corresponding constructor:
```    Vector F(f1,f2, g1,g2);
```
* If you use the comma-initializer don't initialize your matrix with Zero() before (your compiler may be smart enough to optimize it away, but that operation is not necessary). * Sometimes it may be easier for the compiler if you initialize your matrix coefficient-wise (reduces readability though ...), i.e.,
```    Matrix M; // don't zero-initialize unless most entries are 0
M(0,0)= -(Ib_Vbe /* + ... */ );
M(1,0) = M(0,1) = M(1,3) = M(3,1) = 0.0;
M(2,1) = -( M(1,2) = (Ib_Vce + Ic_Vce));
// ...

```
But as Gael said, make sure you compile with full optimization and check your assembly ...
```

Christoph

```
```
2017-03-08 13:56 GMT+00:00 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:

```
```Strange, it usually compiles to trivial code, e.g.:

void foo(Matrix4f &m)
{
m <<  1,  2,  3,  4,
5,  6,  7,  8,
9, 10, 11, 12,
13, 14, 15, 16;
}

compiles to:

movaps LCPI0_0(%rip), %xmm0    ## xmm0 = [1065353216,1084227584,
1091567616,1095761920]
movups %xmm0, (%rdi)
movaps LCPI0_1(%rip), %xmm0    ## xmm0 = [1073741824,1086324736,
1092616192,1096810496]
movups %xmm0, 16(%rdi)
movaps LCPI0_2(%rip), %xmm0    ## xmm0 = [1077936128,1088421888,
1093664768,1097859072]
movups %xmm0, 32(%rdi)
movaps LCPI0_3(%rip), %xmm0    ## xmm0 = [1082130432,1090519040,
1094713344,1098907648]
movups %xmm0, 48(%rdi)
popq %rbp
retq

make sure you compiled with full optimization. If so, check the respective
assembly.

gael

On Tue, Mar 7, 2017 at 1:57 PM, Matthieu Brucher <
matthieu.brucher@xxxxxxxxx> wrote:

```
```Hi,

I'm wondering what is the best way of initializing a 4x4 matrix. I'm
currently using the comma initializer, but it shows up quite high on a
valgrind profile compared to taking the inverse of the same matrix or
preprocessing the coeffs (pow, ln...).
I'm using Eigen 3.2.4, but I can upgrade.

Cheers,

Matthieu
--
Information System Engineer, Ph.D.
Blog: http://blog.audio-tk.com/

```
```

```
```

```
```
--
Dipl. Inf., Dipl. Math. Christoph Hertzberg

Universität Bremen
FB 3 - Mathematik und Informatik
AG Robotik
Robert-Hooke-Straße 1
28359 Bremen, Germany

Zentrale: +49 421 178 45-6611

Robert-Hooke-Straße 5
28359 Bremen, Germany

Tel.:    +49 421 178 45-4021
Empfang: +49 421 178 45-6600
Fax:     +49 421 178 45-4150
E-Mail:  chtz@xxxxxxxxxxxxxxxxxxxxxxxx

Weitere Informationen: http://www.informatik.uni-bremen.de/robotik

```

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