c++ - 5 对角矩阵和 for 循环

标签 c++ for-loop eigen allocation diagonal

有没有更简单的方法来构造 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/

相关文章:

python-3.x - 将每个数字/数字乘以递增值

IOS:在执行过程中停止方法

python - 快速删除包含其他列表元组的元组

c++ - Eigen::Vector3f 对齐

c++ - 特征库 --> 使用来自文件或现有 std::vector<string> 内容的数据初始化矩阵 (c++)

c++ - 如何使用 <random> header 成员在 C++ 中生成随机数?

c++ - 在指向结构的指针中访问指向整数的指针

eigen - 在 Eigen 中混合标量类型

c++ - 从非 const 到 const 模板参数的隐式转换在 boost::optional 中不起作用

c++ - 将 C uint8_t 指针 + 大小组合转换为 C++ 迭代器