Initializing Eigen matrix to zeros, the wrong way.
Alec Jacobson
April 30, 2013
I recently found a pretty silly bug in the way I was initializing an Eigen matrix to be all zeros. Say, my matrix was A
, then I wrote this (admittedly in haste) to resize to an m
by n
matrix of zeros using:
A.resize(m,n);
A *= 0;
This worked most of the time. As should be expected if A is initialized to numbers. But unfortunately, the resize doesn't initialize the values to anything, and some of the random leftovers in memory will be, when interpreted as floats, not-a-numbers (NaNs). Thus when I thought I was zeroing them out I was keeping the NaNs: 0*NaN = NaN
. Luckily, this is also why NaN-related bugs are so easy to trace.
Of course the correct thing to do is explicit set each value to zero. Eigen even has a dedicated function:
A.setZero(m,n);