对于 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)
因此,如果您遍历向量条目并使用适当的公式计算相应的矩阵行和列,则可以根据计算出的行号和列号检查和跳过条目。