我在 Eigen::Vector2f 变量中有一堆数据。我想按列打印它,但结果不均匀,如下所示:
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
我使用的打印语句是这样的:
Eigen::IOFormat fmt(4, 0, ", ", "\n", "", "");
std::cerr << vec1.transpose().format(fmt) << "\t|" << vec2.transpose().format(fmt) << "\t|" << vec3.transpose().format(fmt) << std::endl;
格式语句的精度似乎是指非零数字的个数,而不是小数位数。例如,如果我将精度设置为 2,我会得到 2、-0.044 和 2.8 之类的数字。不管怎样,列都没有对齐。
关于如何使我的列对齐有什么想法吗?这些额外的空间从何而来?
最佳答案
Eigen::IOFormat的第二个参数控制列对齐设置。但是由于您正在打印带转置的列 vector ,因此它没有任何效果。
我使用下面显示的代码得到以下输出:
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
对应代码:
#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;
}
}
关于c++ - 如何在列中打印特征变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876570/