复制向量的一个本征矩阵

时间:2019-04-29 21:42:03

标签: eigen

我有

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就以这种方式复制数据。

感谢您的帮助。

0 个答案:

没有答案