C++ 亚犰狳场

C++ 亚犰狳场,c++,rcpp,armadillo,C++,Rcpp,Armadillo,如果我理解正确的话,Armadillo中的字段就像是任意对象的列表。例如,一组大小不同的矩阵,或矩阵和向量。在文档中,我看到了类型cube,它可以与slices一起使用,因此您可以使用它们来创建子集。但是,似乎没有特定的方法来子集字段 我的代码的简化版本是: arma::mat A = eye(2,2); arma::mat B = eye(3,3)*3; arma::mat C = eye(4,4)*4; arma::field<arma::mat> F(3,1); F(0,0)

如果我理解正确的话,
Armadillo
中的字段就像是任意对象的列表。例如,一组大小不同的矩阵,或矩阵和向量。在文档中,我看到了类型
cube
,它可以与
slices
一起使用,因此您可以使用它们来创建子集。但是,似乎没有特定的方法来子集字段

我的代码的简化版本是:

arma::mat A = eye(2,2);
arma::mat B = eye(3,3)*3;
arma::mat C = eye(4,4)*4;
arma::field<arma::mat> F(3,1);
F(0,0) = A;
F(1,0) = B;
F(2,1) = C;

// to get matrices B and C
F.slices(1,2);
arma::mata=眼睛(2,2);
arma::mat B=眼睛(3,3)*3;
arma::mat C=眼睛(4,4)*4;
arma::场F(3,1);
F(0,0)=A;
F(1,0)=B;
F(2,1)=C;
//得到矩阵B和C
F.切片(1,2);
但是得到错误


Error:field::slices():指示超出范围或使用不正确

首先,您显示的代码中有一个小错误:

F(2,1) = C;
我想应该是:

F(2,0) = C;
其次,函数slices()仅对3D字段有效。但是,您的字段F只是一个二维字段,因为您只在构造函数中指定行和列。要访问矩阵B和C,您可以使用:

arma::field<arma::mat> G=F.subfield(1,0,2,0);

arma::field.

首先,您提供的代码中有一个小错误:

F(2,1) = C;
我想应该是:

F(2,0) = C;
其次,函数slices()仅对3D字段有效。但是,您的字段F只是一个二维字段,因为您只在构造函数中指定行和列。要访问矩阵B和C,您可以使用:

arma::field<arma::mat> G=F.subfield(1,0,2,0);

arma::field.

除了下面由johanmaack给出的答案外,还可以将
.slices()
函数看作指定z轴,而
.cols()
.rows()
函数分别指定x轴和y轴。此外,下面由johanmaack给出的答案,将
.slices()
函数视为指定z轴,而将
.cols()
.rows()
函数视为分别指定x轴和y轴,这可能会有所帮助。