我可以在不复制任何数据的情况下通过向量附加特征矩阵吗?
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
,但只是以分配新内存为代价。有人对如何进行有任何想法吗?
我能想到的唯一解决办法,就是把m
和b
从头开始存储在同一个矩阵中:
Eigen::MatrixXd mb(2,2+1);
Eigen::Ref<Eigen::MatrixXd> m = mb.leftCols(2);
Eigen::Ref<Eigen::VectorXd> b = mb.col(2);
在这些行 m
和 b
之后是 read/writable 对较大 mb
矩阵块的引用,只要 mb
是未调整大小(或破坏)。但是,您无法轻松调整 m
的大小(您可以使用 placement-new,但我怀疑您是否真的需要这个)。
如果您已经为 m
和 b
分配了数据并希望将它们的实际数据彼此相邻,则需要复制一些内容(除非数据彼此相邻已经)。
是否可以在不复制任何数据的情况下将特征向量附加到另一个矩阵?给定矩阵 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;
}
我尝试使用 conservativeResize
将列 b
附加到 m
,但只是以分配新内存为代价。有人对如何进行有任何想法吗?
我能想到的唯一解决办法,就是把m
和b
从头开始存储在同一个矩阵中:
Eigen::MatrixXd mb(2,2+1);
Eigen::Ref<Eigen::MatrixXd> m = mb.leftCols(2);
Eigen::Ref<Eigen::VectorXd> b = mb.col(2);
在这些行 m
和 b
之后是 read/writable 对较大 mb
矩阵块的引用,只要 mb
是未调整大小(或破坏)。但是,您无法轻松调整 m
的大小(您可以使用 placement-new,但我怀疑您是否真的需要这个)。
如果您已经为 m
和 b
分配了数据并希望将它们的实际数据彼此相邻,则需要复制一些内容(除非数据彼此相邻已经)。