关于 c:如何在犰狳中创建一个 nxn Unity 矩阵?

How to create a nxn Unity matrix in Armadillo?

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

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

1
2
3
4
5
6
7
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类型,应该是统一的,但我不知道如何使用它。

我试过了:

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

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

当我尝试了其他的初始化方式,但没有一个可以编译时。

这似乎太简单了,以至于我找不到任何在线示例,但仍然无法弄清楚。


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

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

fill::eye 是关键。当我搜索标识矩阵而不是 Unity 矩阵时,我终于找到了它。


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

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