丢弃 2D 矩阵中的第一行和第一列 - 对扁平的 1D 矢量重复相同的操作

Discarding first row and column in 2D matrix - Repeat same for flattened 1D vector

本文关键字:1D 操作 2D 一行 一列 丢弃      更新时间:2023-10-16

对于 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,只是省略了二维矩阵的第一行和第一列。也就是说,不执行任何计算。因此,如果将它们排除在外,则意味着存储矩阵应该包含零,就像在两个for循环中一样。

任何帮助不胜感激!

假设您的矩阵有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)

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