从eigen :: vectorxd获取矩阵视图/块而无需复制(共享内存)
Get matrix views/blocks from a Eigen::VectorXd without copying (shared memory)
有人知道我如何从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.
相关文章:
- 为共享 ptr 向量实现复制 c'tor?
- 使用共享指针实现复制 c'tor?
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 阻止在返回时复制共享指针
- 如何实现共享数据的复制构造函数
- 共享指针的复制和交换效率
- 复制一个对象并使两者共享一个成员变量 (C++)
- 为什么从引用创建共享指针会复制对象?
- 多线程和共享资源:使用C++定期将数据从缓冲区(数据结构)复制到文件
- 共享_ptr复制构造函数如何工作
- 在派生类之间复制共享变量(浅副本就足够了)
- CUDA 将大于线程计数的数组复制到共享内存
- 复制包含共享指针列表的共享指针后面的对象
- 从eigen :: vectorxd获取矩阵视图/块而无需复制(共享内存)
- 将全局复制到共享内存
- 将全局复制到共享内存的最佳方法
- 更有效地使用fork()和写时复制内存共享
- 是类实例之间共享的类中的' enum '定义,或为每个实例复制
- 我如何让写时复制在linux上的共享内存上工作
- 共享内存和写时复制或右值引用和移动语义