有谁知道我如何从 Eigen::VectorXf 中提取块的好方法,该块可以被解释为特定的 Eigen::MatrixXf 而无需复制数据? ( vector 应该包含几个展平矩阵)
例如类似的东西(伪代码):
VectorXd W = VectorXd::Zero(8);
// Use data from W and create a matrix view from first four elements
Block<2,2> A = W.blockFromIndex(0, 2, 2);
// Use data from W and create a matrix view from last four elements
Block<2,2> B = W.blockFromIndex(4, 2, 2);
// Should also change data in W
A(0,0) = 1.0
B(0,0) = 1.0
目的很简单,有多个表示指向内存中的相同数据。
这可以完成,例如在 python/numpy 中通过提取子矩阵 View 并重塑它们。
A = numpy.reshape(W[0:0 + 2 * 2], (2,2))
我不知道 Eigen 是否支持 Eigen::Block 的重塑方法。
我想, Eigen::Map 非常相似,只是它需要普通的 c 数组/原始内存。
(链接: Eigen::Map )。
克里斯
最佳答案
如果您想将子 vector 重新解释为矩阵,那么是的,您必须使用 Map:
Map<Matrix2d> A(W.data()); // using the first 4 elements
Map<Matrix2d> B(W.tail(4).data()); // using the last 4 elements
Map<MatrixXd> C(W.data()+6, 2,2); // using the 6th to 10th elements
// with sizes defined at runtime.
关于c++ - 从 Eigen::VectorXd 获取矩阵 View /块,无需复制(共享内存),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21556965/