特征如何沿特定维度连接矩阵
Eigen how to concatenate matrix along a specific dimension?
我有两个特征矩阵,我想像matlab cat(0, A, B)
eigen中有什么等效的?
谢谢。
您可以使用逗号初始化器语法为此。
水平:
MatrixXd C(A.rows(), A.cols()+B.cols());
C << A, B;
垂直:
// 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
对于可读性,可能会格式化与空格的垂直串联:
D << A,
B; // <-- But this is for readability only.
我会以类似于此帖子的方式使用eigen的块索引(与现有矩阵相似)。
块索引避免了接受方法中的方向歧义,并且是非常紧凑的语法。以下等同于MATLAB中的C = cat(2, A, B)
:
MatrixXd C(A.rows(), A.cols()+B.cols());
C.leftCols(A.cols()) = A;
C.rightCols(B.cols()) = B;
我的用例略有不同:垂直堆叠eigen矩阵的std ::向量。这是我实现更通用的函数的方式。让我知道这是否可以进一步改进:
// 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;
}
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 将gsl c++程序与"英特尔MKL"链接
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 用于服务网络连接的英特尔TBB任务 - 良好的模型
- 特征如何沿特定维度连接矩阵
- 如何使用英特尔爱迪生连接多个 I2C LCD
- 只接受来自特定子网的连接
- 连接Ipopt与英特尔MKL