c++ - 犰狳中正确的对角矩阵
问题描述
我的代码有效,但我只是想知道是否有人知道如何做到这一点但正确使用犰狳库。谢谢你的时间 :)
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;
解决方案
似乎您正在对矩阵中每一行中的元素求和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 更容易使用;
推荐阅读
- cassandra - cassandra 在批量加载(sstableloader)期间是否运行压缩?
- r - 识别时间间隔是否与多个患者 ID 重叠,在 r
- python - 如何将熊猫数据框从时间与数据重塑为时间与日期与数据
- javascript - 为什么即使我将它转换为数组,我的 querySelectorAll 也不起作用?
- java - 如何使用 ASCII 初始化 nxn 维度上的位置?(爪哇)
- python - 如何在字典列表的 Json 响应中断言值
- amazon-web-services - AWS SAM YAML 文件无法为 S3 事件引用现有存储桶
- html - Flexbox 内右侧的浮动按钮
- java - com.google.firebase.database.DatabaseException :反序列化时需要一个 Map,但得到一个类 java.lang.Long
- download - Snowflake - COPY INTO externalstage(Azure 存储)并压缩文件