如何解决如何在 Eigen
我的以下代码部分似乎需要一段时间才能执行。基本上基于数组索引的值,如果该值是 1 或更高,那么我想将矩阵中的该元素设置为 1,并将该特定行和列的其余元素设置为零。我的稀疏矩阵的大小有时可以达到 15000。想知道是否有更有效的方法来执行此操作。
int count = 5000;
for(k=0;k<count*3;k+=3) {
if(ones(k/3) > 0.99){
for(l=0;l<count*3;l+=3) {
if(k == l) {
sparseM.row(k) *= 0;
sparseM.col(k) *= 0;
sparseM.coeffRef(k,l) = 1;
sparseM.row(k+1) *= 0;
sparseM.col(k+1) *= 0;
sparseM.coeffRef(k+1,l+1) = 1;
sparseM.row(k+2) *= 0;
sparseM.col(k+2) *= 0;
sparseM.coeffRef(k+2,l+2) = 1;
}
}
}
}
解决方法
在这上面花了更多时间之后,我想我有一个比我原来的帖子更有效的解决方案。想知道您的意见。如果您看到任何警告...
for (Eigen::SparseMatrix<double,Eigen::ColMajor>::InnerIterator it(sparseM,k); it; ++it){
if(ones(it.row()) > 0.99){
it.valueRef() = 0.0;
}
if(ones(k) > 0.99){
if(k == it.col()) {
if(it.row() == it.col()) {
it.valueRef() = 1.0;
} else {
it.valueRef() = 0.0;
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。