首页 > 解决方案 > 犰狳中正确的对角矩阵

问题描述

我的代码有效,但我只是想知道是否有人知道如何做到这一点但正确使用犰狳库。谢谢你的时间 :)

arma::mat W = arma::mat(4, 4, arma::fill::ones);
arma::mat D = arma::mat(4, 4, arma::fill::zeros);

for (size_t i = 0; i < W.n_rows; i++)
{
    for (size_t j = 0; j < W.n_cols; j++)
    {
        D(i, i) += W(i, j);
    }
}
std::cout<< "W = \n"<< W <<std::endl;
std::cout<< "D = \n"<< D <<std::endl;

标签: c++armadillo

解决方案


似乎您正在对矩阵中每一行中的元素求和W,并将结果放在D矩阵的对角线上。也就是说,您正在对“列”维度上的元素求和。这在犰狳中很容易做到,不需要任何手动循环。

犰狳具有sum一些重载的功能。其中一个重载接收第二个参数,您可以使用该参数指定要在哪个维度上执行求和。只需指定第二个维度(索引1),您就会得到正确的结果。

但是,您得到的结果arma::sum(W, 1)将是一个向量。这是有道理的,因为您正在对矩阵的一个维度求和。只需将结果传递给arma::diagmat,您就会得到与原始代码相同的D矩阵。然后您的代码可以替换为

arma::mat W = arma::mat(4, 4, arma::fill::ones);
arma::mat D = arma::mat(4, 4, arma::fill::zeros);

W.print("W");
arma::diagmat(arma::sum(W, 1)).print("D");

注意:我已经使用了.print打印矩阵的方法,以防你不知道。它比使用 std::cout 更容易使用;


推荐阅读