有没有更简单的方法来构造 Eigen 中的 5 对角矩阵?我可能可以运行循环并分配对角线和零,但我确实遇到过 Diagonal<> 只是不确定如何将它用于 5 个对角线,而不是一个。有任何想法吗?编辑:想通了这个!对于那些想知道的人;你可以使用
matrix.diagonal(+n) = vector;
matrix.diagonal(-n) = vector;
访问矩阵的超/次对角线并用 vector 覆盖它们。
一般问题:在 C++ 中运行 for 循环时,有没有一种方法可以跳过分配?例如:
int n; //size of matrix
MatrixXd m(n,n); //nxn matrix
for(int i=0; i<n; i++)
{
m(i,i) = 5;
m(i,i+1) = 6;
m(i,i-1) = 4;
m(i,i+2) = 7;
m(i,i-2) = 3;
}
for (int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(m(i,j) = something) //I want the loop to skip m(i,j) where
break; //i have already allocated values to m(i,j)
//How do I do that, in general, in C++?
else
{ m(i,j) = 0;}
}
}
谢谢
最佳答案
听起来你想跳过对角线,因为它们已经被初始化(分配在这里不是正确的术语)。
查看您设置对角线的循环,您可以看到您设置的每个 (i,j) 都服从 abs(i-j) <= 2
。 .例如,当您设置元素 (i, i+2) -> abs(i-(i+2)) -> abs(-2) -> 2
小于或等于 2。
所以你的第二个循环中的条件应该是:
if (abs(i-j) <= 2)
continue;//break will exit the loop, continue will skip to the next iteration
关于c++ - 5 对角矩阵和 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55243583/