amo*_*amo 5 c++ string-formatting eigen
我在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
Run Code Online (Sandbox Code Playgroud)
我正在使用的打印声明是这样的:
Eigen::IOFormat fmt(4, 0, ", ", "\n", "", "");
std::cerr << vec1.transpose().format(fmt) << "\t|" << vec2.transpose().format(fmt) << "\t|" << vec3.transpose().format(fmt) << std::endl;
Run Code Online (Sandbox Code Playgroud)
格式语句的精度似乎表示非零数字的数量,而不是小数位数.例如,如果我将精度设置为2,我会得到像2,-0.044和2.8这样的数字.无论如何,列都没有对齐.
有关如何使我的列对齐的任何想法?所有这些额外空间都来自哪里?
Eigen :: IOFormat的第二个参数控制列对齐设置.但是,由于您使用转置打印列向量,因此它没有任何效果.
我得到以下输出,代码如下所示:
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
Run Code Online (Sandbox Code Playgroud)
对应代码:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7428 次 |
| 最近记录: |