是否可以在不复制任何数据的情况下将特征向量附加到另一个矩阵?给定矩阵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;
}
我尝试着用ggael对一个相关问题的精彩答复。这个问题询问如何在不复制数据的情况下创建新矩阵,而我想修改现有矩阵。我可以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
读出到更大的块/可写的引用mb
矩阵和它们留只要有效mb
且不能调整大小(或破坏)。但是,您无法轻松调整大小m
(可以使用新的展示位置,但是我怀疑您是否确实需要这样做)。
如果你已经有了分配数据m
和b
并希望有彼此相邻的实际数据,您将需要复制的东西(除非该数据是彼此相邻的话)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句