Armadillo C++:将子矩阵传递给函数

Armadillo C++: Passing a submatrix into a function

我正在使用 C++ 和 Armadillo 库。我有一个形式的函数

arma::mat foo(arma::mat my_matrix)

我想将 my_matrix 的子矩阵传递给 foo。 可以像这样提取子矩阵:

my_matrix.col(0)

但每当我尝试这样做时:

foo(my_matrix.col(0))

我遇到编译错误。 如何在不执行此操作的情况下修复它:

mat submatrix = my_matrix.col(0)
foo(submatrix)

(确实有效,但涉及额外的一行代码)。

将输入类型更改为 const 引用 (const arma::mat&),这允许编译器在这种情况下自动生成临时矩阵。

示例:

using namespace arma;

mat foo(const mat& my_matrix)
{
  mat y = my_matrix * 2.0;

  return y;
}


void bar()
{
  mat x(10,10, fill::randu);

  mat y = foo( x.col(0) );

  y.print("y:");
}