丢弃2D矩阵中的第一行和第二列 - 对于展平的1D向量重复相同的行

时间:2016-01-22 07:35:53

标签: c++ math matrix

对于2D matrxi 3x5或5x3我需要执行2D矩阵到1D矢量的映射。 映射是可以的,但跳过第一行和第一列就是我丢失的地方。

我有一个2D矩阵,我使用以下代码访问

for (uint i=0;i < 3; i++)
for (uint j=0;j < 5; j++)
{
     if (i == 0 || j == 0)
         continue;
     else
         // result - Do some calculations and store  
         storage(i,j) = result;
}

现在我必须将2D矩阵转换为1D向量并执行相同的任务。我只能绕着i == 0 ||的条件包裹我的脑袋。 j == 0,它只是遗漏了2D矩阵的第一行和第一列。也就是说,不进行任何计算。 因此,如果将它们排除在外,则意味着存储矩阵应该包含零,就像在两个for循环中一样。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

假设您的矩阵有R行和C列。根据展平向量如何表示矩阵,您可以计算矩阵条目(r,c)与相应向量位置i之间的关系,如下所示:

Representation |  (r,c) is in    | Entry i corresponds to...
               | vector entry... |    row     |   column
---------------+-----------------+------------+-------------
Row-major      |     (r*C+c)     |   (i/C)    |    (i%C)
Column-major   |     (c*R+r)     |   (i%R)    |    (i/R)

因此,如果迭代矢量条目并使用适当的公式计算相应的矩阵行和列,则可以根据计算的行和列号检查和跳过条目。