如何解决如何在特征稀疏矩阵中执行元素加法
我有以下代码,其中 AMAT 目前是一个密集矩阵。然而,大多数元素为零,因此本质上它是一个稀疏矩阵。我知道本征稀疏矩阵不支持块操作。想知道如果我将 AMAT 替换为稀疏矩阵,我该如何重写此代码。 BMAT 是一个 9x9 的密集矩阵,每 3x3 个 BMAT 块都会添加到 AMAT 中的特定块中。 BMAT 在此循环之外计算。
for(j=0;j<5000;j++) {
id1 = ids(0,j);
id2 = ids(1,j);
id3 = ids(2,j);
AMAT.block<3,3>(id1*3,id1*3) = AMAT.block<3,id1*3) + BMAT.block<3,3>(0,0);
AMAT.block<3,id2*3) = AMAT.block<3,id2*3) + BMAT.block<3,3);
AMAT.block<3,id3*3) = AMAT.block<3,id3*3) + BMAT.block<3,6);
AMAT.block<3,3>(id2*3,3>(3,3>(id3*3,3>(6,6);
}
解决方法
据我了解,https://eigen.tuxfamily.org/dox/group__TutorialBlockOperations.html 块操作中的本教程是可能的。但是你需要在编译时知道列和行。
,这可以工作(未经测试,我不知道您的矩阵的实际类型)。这个想法是编写一个自定义迭代器,它提供 的每个条目的索引和值,并将其传递给
AMAT
(重复的条目将被汇总在一起)。这将遍历您的索引列表两次,但不幸的是没有利用 setFromTriplets
的块结构。但它会在 O(nnz) 时间内执行。
AMAT
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。