如何将Eigen库的Matrix或Vector类型转换为字符串?

时间:2016-05-29 09:00:37

标签: eigen eigen3

如何在特征库中获取Vector3f或其他类型的文本表示。我看到许多使用.format()的示例返回WithFormat类。然后这可以与cout一起使用。但是,我正在寻找以某种人类可读的形式将Vector3f作为std:string的方法。确切的格式化并不重要,所以如果Eigen有任何默认格式,那么它也可以。

注意:我当然可以使用stringstream来替换cout,但是我可以通过更直接的方式来实现这一点。

3 个答案:

答案 0 :(得分:4)

我发现最简单的解决方案,不确定是否最佳:

static std::string toString(const Eigen::MatrixXd& mat){
    std::stringstream ss;
    ss << mat;
    return ss.str();
}

答案 1 :(得分:2)

据我所知,stringstream方法是可行的方法。实际上,在IO.h文件(Eigen::internal::print_matrix)中,开发人员使用字符串流来获取每个条目的宽度。

答案 2 :(得分:0)

我最终采取的方法如下:

static std::string toString(const Vector3d& vect)
{
    return stringf("[%f, %f, %f]", vect[0], vect[1], vect[2]);
}

static string stringf(const char* format, ...)
{
    va_list args;
    va_start(args, format);

    int size = _vscprintf(format, args) + 1;
    std::unique_ptr<char[]> buf(new char[size] ); 

    #ifndef _MSC_VER
        vsnprintf(buf.get(), size, format, args);
    #else
        vsnprintf_s(buf.get(), size, _TRUNCATE, format, args);
    #endif

    va_end(args);            

    return string(buf.get());
}