在C ++中给出列,转换右上角三角矩阵

时间:2011-08-04 13:57:59

标签: c++ matrix

我有一个包含

之类的向量
{1,  2, 1,  4, 5, 1,  7, 8 ,9, 1 }

因此,向量表示右上矩阵的列

  1 2 4 7
  0 1 5 8
  0 0 1 9
  0 0 0 1 

我如何使用矢量并从

获取
{1,  2, 1,  4, 5, 1,  7, 8 ,9, 1 }

  1 2 4 7
  2 1 5 8
  4 5 1 9
  7 8 9 1 

作为载体

{ 1,2,4,7,
  2,1,5,8, 
  4,5,1,9,
  7,8,9,1 }

实际上在查看代码之后,解决方案是:

for (int i = 0; i < cols; ++i)
    for (int j = 0; j <= i; ++j)
        v[cols * i + j] = v[cols * j + i] = w[k++];

1 个答案:

答案 0 :(得分:3)

int k=0;
for(int i = 0; i<4; ++i)
    for(int j = 0; j<=i; ++j)
        v[i][j]=v[j][i]=w[k++];

假设源向量是w,dest是v。

如果它应该是1D而不是2D,那么[i][j]应该更改为[4*i+j]

修改 这可以“就地”完成,但这有点棘手。为了不覆盖您尚未使用的值,您必须向后循环并进行两次传递:

int k=10;
for(int i = 3; i >=0; --i)
    for(int j = i; j >= 0; --j)
        v[4*i+j]=v[--k];
for(int i = 0; i < 4; ++i)
    for(int j = 0; j < i; ++j)
        v[4*j+i]=v[4*i+j];