5 对角矩阵和 for 循环
5 Diagonal Matrix and for loops
有没有更简单的方法来构造 Eigen 中的 5 对角矩阵?我可能可以 运行 for 循环并分配对角线和零,但我确实遇到过 Diagonal<> 只是不确定如何将它用于 5 个对角线,而不是一个。有任何想法吗?编辑:想通了这个!对于那些想知道的人;你可以使用
matrix.diagonal(+n) = vector;
matrix.diagonal(-n) = vector;
访问矩阵的 super/sub 条对角线并用向量覆盖它们。
一般问题:当 运行在 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
。例如,当您设置小于或等于 2 的元素 (i, i+2) -> abs(i-(i+2)) -> abs(-2) -> 2
时。
所以你的第二个循环中的条件应该是:
if (abs(i-j) <= 2)
continue;//break will exit the loop, continue will skip to the next iteration
有没有更简单的方法来构造 Eigen 中的 5 对角矩阵?我可能可以 运行 for 循环并分配对角线和零,但我确实遇到过 Diagonal<> 只是不确定如何将它用于 5 个对角线,而不是一个。有任何想法吗?编辑:想通了这个!对于那些想知道的人;你可以使用
matrix.diagonal(+n) = vector;
matrix.diagonal(-n) = vector;
访问矩阵的 super/sub 条对角线并用向量覆盖它们。
一般问题:当 运行在 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
。例如,当您设置小于或等于 2 的元素 (i, i+2) -> abs(i-(i+2)) -> abs(-2) -> 2
时。
所以你的第二个循环中的条件应该是:
if (abs(i-j) <= 2)
continue;//break will exit the loop, continue will skip to the next iteration