c++ - 如何在列中打印特征变量?

标签 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

我使用的打印语句是这样的:

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/

相关文章:

c++ - 结合2个正则表达式

python - 在Python中读取格式化的多行

c++ - 对齐数据类型 Eigen::Matrix 的数组或 vector 声明

c++ - 欧拉到四元数转换 PCL + Eigen

c++ - 数组大小调整中的内存错误

c++ - 从类定义中省略 "private"关键字是否令人困惑?

wpf - StringFormat 中的空格

swift - 让 Str = 字符串(格式 : "لديك d٪ ثانية متبقية للاتصال", 秒)

c++ - Eigen::SparseMatrix 转置处的 std::bad_alloc

c++ - 为什么 std::list 迭代器没有 operator+?