如何在nalgebra中将一个矩阵的列赋值给另一个矩阵?
在nalgebra中高效将矩阵列赋值给DMatrix
你可以利用MatrixSliceMut提供的assign方法直接完成列赋值,无需手动遍历每个元素,修改后的代码如下:
let zero: T = convert(0.0); let mut basis = DMatrix::from_element(rows, rank, zero); // matrix 是输入的 rows x cols 维度矩阵 for i in 0..location.len() { basis.column_mut(i).assign(&matrix.column(location[i])); }
原代码问题说明
basis.column_mut(i)返回的是MatrixSliceMut<T, Dynamic, U1>类型,Rust不允许直接对这类引用式视图赋值,必须通过类型提供的方法修改内部数据。assign是nalgebra为矩阵视图提供的批量赋值方法,会自动处理维度兼容场景下的数据复制,性能和底层内存复制一致。
补充说明
如果location是连续索引,还可以结合columns_mut和columns迭代器简化代码,但针对非连续索引,上述循环写法已经足够高效,远优于手动双重循环的实现。
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

