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)