16

文档说:

...在 Eigen 中,向量只是矩阵的一种特殊情况,具有 1 行或 1 列。他们有 1 列的情况是最常见的;这样的向量称为列向量,通常缩写为向量。在另一种情况下,它们有 1 行,它们被称为行向量。

然而,这个程序输出不直观的结果:

#include <eigen3/Eigen/Dense>
#include <iostream>

typedef Eigen::Matrix<double, 1, Eigen::Dynamic> RowVector;

int main(int argc, char** argv)
{
    RowVector row(10);
    std::cout << "Rows: "    << row.rows() << std::endl;
    std::cout << "Columns: " << row.cols() << std::endl;
    row.transposeInPlace();
    std::cout << "Rows: "    << row.rows() << std::endl;
    std::cout << "Columns: " << row.cols() << std::endl;
}

输出:

Rows: 1
Columns: 10
Rows: 1
Columns: 10

这是一个错误,还是我错误地使用了该库?

4

1 回答 1

14

的文档transposeInPlace说:

笔记

如果矩阵不是方阵,则*this必须是可调整大小的矩阵。

您需要您的类型同时具有动态行和列:

Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>

但是,已经有一个typedefMatrixXd.

或者,如果您仍然想要编译时大小,您可以使用tranpose而不是transposeInPlace给您一个新的转置矩阵,而不是修改当前的矩阵:

typedef Eigen::Matrix<double, Eigen::Dynamic, 1> ColumnVector;
ColumnVector column = row.transpose();
于 2013-02-19T10:23:46.600 回答