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

How to create a nxn Unity matrix in 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;
   }
 }

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

Armadillo 有 umat 类型,应该是 unity,但我不知道如何使用它。

我试过了:

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

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

当我尝试其他初始化方式时,none 可以编译。

这看起来太基础了,我在网上找不到任何例子,但还是想不通。

我在发布这个问题后立即找到了它。代码是。

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

以fill::eye为关键。当我搜索 Identity matrix 而不是 Unity matrix 时,我终于找到了它。

您似乎想要 Claes Rolen 建议的 identity matrix and not a unit matrix from you first example. If you want the former than see the arma::eye<arma::umat>()。对于后者,请参阅您自己的回复。

关于您评论中的问题,umat 是一个类型为 uword 的矩阵,即无符号整数。