I have a bunch of data in Eigen::Vector2f variables. I want to print it in columns, but I end up with uneven results like so:
Vec1 |Vec2 |Vec3
1.94609 -0.0863508 | 1.71155 -0.137481 |3.00915
1.94609 -0.0863508 |1.57448 1.8755 |387.864
1.94609 -0.0863508 |-0.415677 1.66801 |583.542
2.01589 1.94324 | 1.71155 -0.137481 |433.156
2.01589 1.94324 |1.57448 1.8755 |10.1969
2.01589 1.94324 |-0.415677 1.66801 |303.132
0.00212092 1.966 | 1.71155 -0.137481 |584.061
0.00212092 1.966 |1.57448 1.8755 |124.429
0.00212092 1.966 |-0.415677 1.66801 |17.5172
The print statement I'm using is this:
Eigen::IOFormat fmt(4, 0, ", ", "\n", "", "");
std::cerr << vec1.transpose().format(fmt) << "\t|" << vec2.transpose().format(fmt) << "\t|" << vec3.transpose().format(fmt) << std::endl;
The format statement's precision seems to mean the number of non-zero digits, not decimal places. For instance, if I set the precision to 2, I get numbers like 2, -0.044, and 2.8. And regardless of this, the columns are not aligned.
Any ideas on how to get my columns aligned? Where are all these extra spaces coming from?
The scond parameter of the Eigen::IOFormat controls the Column Align settings. But since you are printing a column vector with transpose, it has no effect.
I get the following output with the code shown below:
vec1 |vec2 |vec3
-1 0.13 |-0.61 0.62 |0.17 -0.04
-0.3 0.79 |0.65 0.49 |-0.65 0.72
0.42 0.027 |-0.39 -0.97 |-0.82 -0.27
-0.71 -0.67 |0.98 -0.11 |-0.76 -0.99
-0.98 -0.24 |0.063 0.14 |0.2 0.21
-0.67 0.33 |-0.098 -0.3 |-0.89 0.22
0.57 0.61 |0.04 -0.4 |0.75 0.45
0.91 0.85 |0.079 -0.72 |-0.076 -0.53
0.72 -0.58 |0.56 0.69 |0.99 1
0.22 -0.22 |-0.47 -0.41 |0.68 -0.95
Corresponding code:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main() {
std::cout << "vec1\t" << "\t|" << "vec2\t" << "\t|" << "vec3" << std::endl;
for (int i = 0; i < 10; ++i) {
Vector2f vec1, vec2, vec3;
vec1.setRandom();
vec2.setRandom();
vec3.setRandom();
const IOFormat fmt(2, DontAlignCols, "\t", " ", "", "", "", "");
std::cout << vec1.transpose().format(fmt) << "\t|" << vec2.transpose().format(fmt) << "\t|" << vec3.transpose().format(fmt) << std::endl;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With