簡體   English   中英

如何在Eigen中將行向量轉換為列向量?

[英]How to convert row vector to column vector in Eigen?

文件說:

...在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

這是一個錯誤,還是我錯誤地使用了庫?

transposeInPlace的文檔說:

注意

如果矩陣不是正方形,則*this必須是可調整大小的矩陣。

您需要您的類型同時擁有動態行和列:

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

但是,已有一個typedefMatrixXd

或者,如果您仍然需要編譯時大小,則可以使用tranpose而不是transposeInPlace為您提供新的轉置矩陣,而不是修改當前的矩陣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM