我正在尝试na::Matrix2x3
通过从 a 的前两行复制来创建 a na::Matrix3
。结果将存储在结构中。
我不知道该怎么做,文档很混乱。我尝试了clone()
, into()
,from(...)
等,但似乎没有任何效果。
这是我尝试使用.clone()
(游乐场)的可重现示例:
extern crate nalgebra as na; // 0.27.1
fn main() {
let proj33 = na::Matrix3::<f64>::zeros();
let proj: na::Matrix2x3<f64> = proj33.rows(0, 2).clone();
}
error[E0308]: mismatched types
--> src/main.rs:5:36
|
5 | let proj: na::Matrix2x3<f64> = proj33.rows(0, 2).clone();
| ------------------ ^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `Const`, found struct `Dynamic`
| |
| expected due to this
|
= note: expected struct `Matrix<_, Const<2_usize>, _, ArrayStorage<f64, 2_usize, 3_usize>>`
found struct `Matrix<_, Dynamic, _, SliceStorage<'_, f64, Dynamic, Const<3_usize>, Const<1_usize>, Const<3_usize>>>`
这似乎可行,但由于它首先将矩阵初始化为零,因此很浪费:
let mut proj = na::Matrix2x3::<f64>::zeros();
proj.copy_from(&proj33.rows(0, 2));
在 Eigen (C++) 中,我会这样做:
const Eigen::Matrix<double, 2, 3> proj = proj33.topRows(2);