2014-07-21 1 views
2

나는 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; 

형식 문의 정밀도는 의미로 보인다 소수점 이하가 아닌 0이 아닌 숫자의 수. 예를 들어 정밀도를 2로 설정하면 2, -0.044 및 2.8과 같은 숫자가 표시됩니다. 이것에 상관없이 기둥이 정렬되지 않습니다.

내 열을 얻는 방법에 대한 아이디어가 있습니까? 이 모든 여분의 공간은 어디에서 오는 것입니까?

답변

3

Eigen::IOFormat의 scond 매개 변수는 Column Align 설정을 제어합니다. 그러나 트랜스 포즈를 사용하여 열 벡터를 인쇄 중이므로 효과가 없습니다.

나는 코드를 다음과 같은 출력은 다음과 같이 얻을 :

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