我可以在不复制任何数据的情况下通过向量附加特征矩阵吗?

Can I append an Eigen matrix by a vector without copying any data?

是否可以在不复制任何数据的情况下将特征向量附加到另一个矩阵?给定矩阵 m 和向量 b 我想修改矩阵 m 使得 m = [m, b] 无需复制数据 。这可能吗?

一个例子是:

#include <Eigen/Core>
using namespace Eigen;
int main()
{
    MatrixXd m(2,2);
    m << 0, 1, 2, 3;
    VectorXd b(2);
    b << 4, 5;
    return 0;
}

我尝试使用 . This questions asks how to create a new matrix without copying data, whilst I would like to modify an existing matrix. I could use conservativeResize 将列 b 附加到 m,但只是以分配新内存为代价。有人对如何进行有任何想法吗?

我能想到的唯一解决办法,就是把mb从头开始存储在同一个矩阵中:

Eigen::MatrixXd mb(2,2+1);
Eigen::Ref<Eigen::MatrixXd> m = mb.leftCols(2);
Eigen::Ref<Eigen::VectorXd> b = mb.col(2);

在这些行 mb 之后是 read/writable 对较大 mb 矩阵块的引用,只要 mb 是未调整大小(或破坏)。但是,您无法轻松调整 m 的大小(您可以使用 placement-new,但我怀疑您是否真的需要这个)。

如果您已经为 mb 分配了数据并希望将它们的实际数据彼此相邻,则需要复制一些内容(除非数据彼此相邻已经)。