特征:通过引用访问矩阵的列

use*_*183 1 c++ eigen

我正在使用Eigen C++矩阵库,我想获得对矩阵列的引用.文档说使用matrix_object.col(index),但这似乎是返回一个表示列的对象,而不是简单地引用原始矩阵对象内的列.我担心这涉及不必要地复制该列中的元素,因为更改列对象中的值不会影响原始矩阵.

如果有人比我更熟悉Eigen,使用这个函数来访问矩阵的列是否仍然有效?如果没有,我怎样才能获得矩阵内原始列的引用?

gga*_*ael 7

mat.col(i)返回一个引用mat列的轻量级读写代理对象.根本没有副本.所以你可以这样做:

mat.col(i)(j) = 2;
Run Code Online (Sandbox Code Playgroud)

相当于mat(j,i)= 2; 你也可以这样做:

mat.col(i).swap(mat.col(j));
Run Code Online (Sandbox Code Playgroud)

没有任何额外的副本.也许在您的代码中,您明确地(或隐式地)将代理列对象复制到Vector对象中?像这样:

VectorXd col_of_mat = mat.col(j);
Run Code Online (Sandbox Code Playgroud)