Rust:代数转置

Rust: nalgebra transpose

我开始练习生锈了。 我已经 运行 程序并得到:

VecStorage { data: [1.0, 88.0, 87.0, 1.0, 70.0, 77.0, 1.0, 80.0, 79.0, 1.0, 82.0, 85.0, 1.0, 90.0, 97.0, 1.0, 100.0, 98.0], nrows: Dynamic { value: 6 }, ncols: Dynamic { value: 3 } }
VecStorage { data: [1.0, 1.0, 1.0, 88.0, 80.0, 90.0, 87.0, 79.0, 97.0, 1.0, 1.0, 1.0, 70.0, 82.0, 100.0, 77.0, 85.0, 98.0], nrows: Dynamic { value: 3 }, ncols: Dynamic { value: 6 } }

main.rs:

let matrix = vec![1.0,88.0,87.0,1.0,70.0,77.0,1.0,80.0,79.0,1.0,82.0,85.0,1.0,90.0,97.0,1.0,100.0,98.0];
    let matrix =  DMatrix::from_vec(6,3,matrix);
    println!("{:?}",matrix);
    println!("{:?}",matrix.transpose());

但是转置矩阵不同(与正确的转置不同),知道为什么吗?

根据documentation,矩阵由column-major顺序的向量填充。我从提供的数据中怀疑您期望 row-major 一个(原始矩阵的第一列仅包含 1s)。

如果我们使用 Display 格式而不是 Debug 我们可以看到这一点 - 这种情况下的输出如下:

  ┌             ┐
  │   1   1   1 │
  │  88  80  90 │
  │  87  79  97 │
  │   1   1   1 │
  │  70  82 100 │
  │  77  85  98 │
  └             ┘

  ┌                         ┐
  │   1  88  87   1  70  77 │
  │   1  80  79   1  82  85 │
  │   1  90  97   1 100  98 │
  └                         ┘

Playground