考虑以下特征代码片段:
Eigen::MatrixXf A (m, n), B;
B = A;
Eigen::MatrixXf A (m, n), B (m, n);
B = A;
在选项 1 中,我假设
B
开始时具有大小 (0, 0)
,然后动态分配以具有与 A
匹配的大小,然后 A
的元素被复制到 B
中。我的问题是:
B
已经动态分配了与 A
相匹配的大小,Eigen 是否能够将 A
的元素复制到 B
的元素?或者它是否按照 delete
后跟适当大小的 malloc
/new
的方式执行某些操作,丢弃预先分配的内存?B
无论如何都会被删除并重新分配),那么如果我知道A
,那么将
B
的元素复制到
B
同时避免内存重新分配的有效/优雅的方法是什么?已经有正确的尺寸了吗?我可以在
m
和 n
上编写循环并进行手动复制,但我想知道是否有可以利用矢量化的内置方法。我能找到的唯一方法是获取 A
的底层数据指针,然后使用 Eigen::Map
,但我认为这实际上并没有复制数据 - 它只是将 B
指向内存与 A
相关的块。此外,根据 docs,
.noalias()
似乎在这里没有效果,因为它仅适用于矩阵乘法。我想知道是否有更好的方法。谢谢!
我想
Eigen::MatrixXf A (m, n), B (m, n);
B.block(0, 0, m, n) = A;
是一种方法,但我不确定这是最干净的方法。