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 一个(原始矩阵的第一列仅包含 1
s)。
如果我们使用 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 │
└ ┘
我开始练习生锈了。 我已经 运行 程序并得到:
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 一个(原始矩阵的第一列仅包含 1
s)。
如果我们使用 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 │
└ ┘