首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >特征:如何沿特定维度连接矩阵?

特征:如何沿特定维度连接矩阵?
EN

Stack Overflow用户
提问于 2014-02-01 17:06:50
回答 3查看 32.7K关注 0票数 47

我有两个特征矩阵,我想把它们连接起来,就像matlab中的cat(0, A, B)一样。

在eigen中有没有类似的东西?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-01 17:22:21

为此,您可以使用逗号初始值设定项语法。

水平方向:

代码语言:javascript
复制
MatrixXd C(A.rows(), A.cols()+B.cols());
C << A, B;

纵向:

代码语言:javascript
复制
// eigen uses provided dimensions in declaration to determine
// concatenation direction
MatrixXd D(A.rows()+B.rows(), A.cols()); // <-- D(A.rows() + B.rows(), ...)
D << A, B; // <-- syntax is the same for vertical and horizontal concatenation

为了提高可读性,可以使用空格设置垂直连接的格式:

代码语言:javascript
复制
D << A,
     B; // <-- But this is for readability only. 
票数 72
EN

Stack Overflow用户

发布于 2019-02-01 02:33:44

我将以类似于this post (连接到现有矩阵)的方式使用Eigen's block indexing

块索引避免了公认方法中的方向歧义,并且语法非常紧凑。下面的代码相当于MATLAB中的C = cat(2, A, B)

代码语言:javascript
复制
MatrixXd C(A.rows(), A.cols()+B.cols());
C.leftCols(A.cols()) = A;
C.rightCols(B.cols()) = B;
票数 6
EN

Stack Overflow用户

发布于 2018-06-21 02:37:34

我有一个稍微不同的用例:垂直堆叠特征矩阵的std::向量。下面是我如何实现一个更通用的函数。如果可以进一步改进,请让我知道:

代码语言:javascript
复制
// matrix_eig = Eigen::MatrixXf in RowMajor format
matrix_eig VStack(const std::vector<matrix_eig> &mat_vec) {
  assert(!mat_vec.empty());
  long num_cols = mat_vec[0].cols();
  size_t num_rows = 0;
  for (size_t mat_idx = 0; mat_idx < mat_vec.size(); ++mat_idx) {
    assert(mat_vec[mat_idx].cols() == num_cols);
    num_rows += mat_vec[mat_idx].rows();
  }
  matrix_eig vstacked_mat(num_rows, num_cols);
  size_t row_offset = 0;
  for (size_t mat_idx = 0; mat_idx < mat_vec.size(); ++mat_idx) {
    long cur_rows = mat_vec[mat_idx].rows();
    vstacked_mat.middleRows(row_offset, cur_rows) = mat_vec[mat_idx];
    row_offset +=  cur_rows;
  }
  return vstacked_mat;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21496157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档