代码之家  ›  专栏  ›  技术社区  ›  Makogan

如何将一个矩阵的列分配给另一个矩阵,nalgebra?

  •  1
  • Makogan  · 技术社区  · 1 年前

    我正在使用nalgebra,我想通过将一个矩阵设置为另一个具有兼容维度的列来修改它,如下所示:

        let zero: T = convert(0.0);
        let mut basis = DMatrix::from_element(rows, rank, zero);
        // matrix is an input with dimensions rows x cols
        for i in 0..location.len()
        {
            basis.column_mut(i) = matrix.column(location[i]);
        }
    

    我还尝试过取消对作业双方的引用,并寻找某种“分配”方法,但没有成功。

    set_column 不起作用,因为 DMatrix 不执行 DimName

    我目前的工作就是这样,但我没有;I don’我一点也不喜欢:

     // Construct basis vectors initialized to 0.
        let zero: T = convert(0.0);
        let mut basis = DMatrix::from_element(rows, rank, zero);
    
        for i in 0..location.len()
        {
            // Copy the pivot column from the matrix.
            let col = location[i];
            for r in 0..matrix.nrows()
            {
                basis[(r, i)] = matrix[(r, col)];
            }
        }
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   mcmuffin6o    1 年前

    我不知道是什么 column_mut 意思是,它做什么,或者它应该如何工作。它的文档相当稀疏(不存在)。我想 set_column 做你想做的事(也许你说得不对?):

    use nalgebra::DMatrix;
    let rows = 2;
    let cols = 3;
    let zero = 0.0;
    let mut basis = DMatrix::from_element(rows, cols, zero);
    let matrix = DMatrix::from_row_slice(rows, cols, &[
      1.0, 3.0, 5.0,
      2.0, 4.0, 6.0
    ]);
    let location = [1, 0, 2];
    for i in 0..location.len() {
      basis.set_column(i, &matrix.column(location[i]));
    }
    

    (我将你的代码调整为MWE)