簡體   English   中英

將向量分配給Eigen中的矩陣列

[英]Assigning a vector to a matrix column in Eigen

這問題急忙被問到了。 原始程序中的錯誤,不是此處顯示的代碼中的拼寫錯誤。 錯誤是我的程序v由於某些條件而沒有填充。

這個主題的更有用的內容是在接受的答案中演示將std :: vector復制到Eigen Matrix的所有行或列。


我想將向量復制到矩陣的列中,如下所示:

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

int main() {
 int m = 10;

 std::vector<Eigen::VectorXd> v(m);
 Eigen::MatrixXd S(m,m);

 for (int i = 0; i != m; ++i) {
  v[i].resize(m);

  for (int j = 0; j != m; ++j) {
   v[i](j) = rand() % m;
  }

  //S.cols(i) = v[i]; //needed something like this
 }

 return 0;
}

S的類型為Eigen :: MatrixXd,維度為mxm。 v是Eigen :: VectorXd的std :: vector,其中每個Eigen :: VectorXd的大小為m,並且v中有m個。

關於原始問題,您需要使用Eigen::Map包裝std::vector 你可以/也應該使操作成為一個單行。

重寫的問題被縮減為拼寫錯誤。 S.cols(i)應為S.col(i)

int main()
{
    size_t sz = 6;
    Eigen::MatrixXd S(sz, sz);
    std::vector<double> v(sz);
    std::vector<Eigen::VectorXd> vv(sz);
    for(int i = 0; i < sz; i++)
    {
        v[i] = i*2;
        vv[i] = Eigen::VectorXd::LinSpaced(sz, (i+sz), (i+sz)*2);
    }

    for (int i = 0; i != sz; ++i)
        S.col(i) = vv[i];
    std::cout << S << "\n\n";

    S.rowwise() = Eigen::Map<Eigen::RowVectorXd>(v.data(), sz);
    std::cout << S << "\n\n";

    S.colwise() = Eigen::Map<Eigen::VectorXd>(v.data(), sz);
    std::cout << S << "\n\n";

    return 0;
}

哪個會輸出

6 7 8 9 10 11
7.2 8.4 9.6 10.8 12 13.2
8.4 9.8 11.2 12.6 14 15.4
9.6 11.2 12.8 14.4 16 17.6
10.8 12.6 14.4 16.2 18 19.8
12 14 16 18 20 22

0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10
0 2 4 6 8 10

0 0 0 0 0 0
2 2 2 2 2 2
4 4 4 4 4 4
6 6 6 6 6 6
8 8 8 8 8 8
10 10 10 10 10 10

暫無
暫無

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

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