如何在Armadillo中创建一个nxn Unity矩阵?

时间:2017-10-03 18:04:50

标签: c++ armadillo

我正在尝试将Armadillo用于C ++。我使用该网站作为参考:Armadillo Link

我让它工作的简单而缓慢的方式是:

arma::mat UnityMatrix = arma:mat(5,5,fill::zeros)
for (int ii = 0; ii < UnityMatrix.n_rows;ii++){
 for (int jj = 0; jj < UnityMatrix.n_cols;jj++){
   if (ii==jj){
     UnityMatrix(ii,jj)=1;
   }
 }

} 我创建一个零矩阵,并在对角线上添加一个。这有效,但我相信在犰狳中有更有效的方法。

犰狳的umat类型应该是统一的,但我无法弄清楚如何使用它。

我试过了:

arma::umat InitM;
InitM.set_size(5,5);

这给了我一个随机值的5x5矩阵。

当我尝试其他初始化方法时,没有人会编译。

这看起来非常基本,我找不到任何在线示例,但仍然无法弄明白。

2 个答案:

答案 0 :(得分:0)

发布此问题后我发现了它。代码是。

arma::mat UnityMatrix = arma:mat(5,5,fill::eye)

以fill :: eye为关键。当我搜索身份矩阵而非Unity矩阵时,我终于找到了它。

答案 1 :(得分:0)

您似乎想要第一个示例中的identity matrix而不是unit matrix。如果您想要前者而不是Claes Rolen建议的arma::eye<arma::umat>()。对于后者,请参阅您自己的回复。

至于你的一条评论中的问题,umat是一个类型为uword的矩阵,即unsigned int。