2013-02-19 238 views
9

documentation說:如何將行向量轉換爲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 

這是一個錯誤,還是我使用的庫不正確?

+2

我添加了一個斷言的發展Eigen的分支,以防止這種(錯誤)使用。 – 2013-02-20 14:12:05

回答

11

transposeInPlace文檔說:

注意

如果矩陣不是方形,那麼*this必須是一個可調整大小的矩陣。

你需要你的類型有兩種動態的行和列:

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

然而,有已經爲這個typedefMatrixXd

另外,如果您仍然希望編譯時的大小,你可以使用tranpose,而不是transposeInPlace給你一個新的轉置矩陣,而不是修改當前的一個:

typedef Eigen::Matrix<double, Eigen::Dynamic, 1> ColumnVector; 
ColumnVector column = row.transpose(); 
+1

謝謝!就是這個 – 2013-02-19 10:25:37