对于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循环中一样。
感谢任何帮助!
答案 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)
因此,如果迭代矢量条目并使用适当的公式计算相应的矩阵行和列,则可以根据计算的行和列号检查和跳过条目。