如何在 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
的矩阵,即无符号整数。
我正在尝试将 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
的矩阵,即无符号整数。