【问题标题】:How to print Eigen variables in columns?如何在列中打印特征变量?
【发布时间】:2014-09-12 15:15:15
【问题描述】:

我在 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 这样的数字。不管怎样,列都没有对齐。

关于如何让我的列对齐的任何想法?这些多余的空间是从哪里来的?

【问题讨论】:

    标签: c++ string-formatting eigen


    【解决方案1】:

    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
    

    对应代码:

    #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;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多