标签: rcppeigen

列子集的特征矩阵的矩阵乘法

Eigen::Matrix在一组随机列索引上进行矩阵乘法的最快方法是什么?

Eigen::MatrixXd mat = Eigen::MatrixXd::Random(100, 1000);
// vector of random indices (linspaced here for brevity)
Eigen::VectorXi idx = VectorXi::LinSpaced(8,1000,9);
Run Code Online (Sandbox Code Playgroud)

我正在使用 RcppEigen 和 R,它仍然是 Eigen 的 3.x 版本(不支持()索引数组),无论如何,我的理解是()操作符仍然执行深度复制。

现在我正在进行深度复制并生成一个新矩阵,其中仅包含以下列的数据idx

template <typename T>
inline Eigen::Matrix<T, -1, -1> subset_cols(const Eigen::Matrix<T, -1, -1>& x, const std::vector<size_t>& cols) {
    Eigen::Matrix<T, -1, -1> y(x.rows(), cols.size());
    for (size_t i = 0; i < cols.size(); ++i)
        y.col(i) = x.col(cols[i]);
    return y;
}
Run Code Online (Sandbox Code Playgroud)

然后进行矩阵乘法:

Eigen::MatrixXd sub_mat = subset_cols(mat, idx);
Eigen::MatrixXd a = …
Run Code Online (Sandbox Code Playgroud)

c++ linear-algebra eigen rcppeigen

6
推荐指数
1
解决办法
539
查看次数

标签 统计

c++ ×1

eigen ×1

linear-algebra ×1

rcppeigen ×1