从eigen :: vectorxd获取矩阵视图/块而无需复制(共享内存)

Get matrix views/blocks from a Eigen::VectorXd without copying (shared memory)

本文关键字:复制 共享 内存 获取 vectorxd eigen 视图      更新时间:2023-10-16

有人知道我如何从eigen :: vectorxf中提取可以解释为特定eigen :: matrixxf而不复制数据的块?(向量应包含几个平坦的矩阵)

例如。这样的东西(伪代码):

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中提取cobsatrix视图并重塑它们。

A = numpy.reshape(W[0:0 + 2 * 2], (2,2))

我不知道特征是否支持eigen :: block。

的重塑方法

我猜,eigen :: Map非常相似,除了它期望普通的C阵列/原始内存。(链接:eigen :: map)。

chris

如果要重新诠释子向量为矩阵,则是的,您必须使用映射:

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.