我有
A
(长度= depth
的向量矩阵)为5x5(5行5列)。
depth
= 3(它是矩阵A的任何单元格的向量的长度)。
B
(单个值的矩阵)是75 x任何(5 * 5 * 3行和任何列)。
x_size_kernel
= 5。
block_idx
是索引,例如,在这里我们使它等于0(仅适用于矩阵B的一列)
这个简单而严格的示例的任务是将矩阵A
的所有向量复制到矩阵B
的一个(第一列)。
现在我解决了这样的问题(这是具有精确数据的具体示例)
Eigen::MatrixXf B;
B = Eigen::MatrixXf(x_size_kernel * y_size_kernel * depth, 100).setZero();
Eigen::Matrix<Eigen::VectorXf, Eigen::Dynamic, Eigen::Dynamic> A;
A.resize(5, 5);
auto depth = 3;
for (auto yy = 0; yy < A.rows(); yy++) {
for (auto xx = 0; xx < A.cols(); xx++) {
A(yy, xx).resize(depth);
}
}
auto block_idx = 0;
// and here are all copy for one column of matrix B
for (auto my = 0; my < x_size_kernel; my++) {
for (auto mx = 0; mx < x_size_kernel; mx++) {
// add the next column of block data
B.col(block_idx).
segment(mx * depth + my * x_size_kernel * depth, depth).noalias() =
A(my, mx);
}
}
但是上面的代码很慢,所以我需要更快的代码。也许有人知道如何只使用一次Eigen
就以这种方式复制数据。
感谢您的帮助。