F# Math.Net Matrix.mapRows 创建不同大小的新矩阵

F# Math.Net Matrix.mapRows to create new matrix with different size

我有一个函数可以操纵 Vector<float> 产生一个具有不同长度的新 Vector<float>,例如在向量

前面附加一个数字
let addElementInfront (x:Vector<float>) =
    x.ToArray() 
    |> Array.append [|x.[0]|]
    |> vector

现在我想将它应用于 (2x2) 矩阵的所有行,我希望得到 (2x3) 矩阵,我尝试使用 MathNet.Numerics.LinearAlgebraMatrix.mapRows 但它给出了我的错误是尺寸需要相同。

只是想知道 MathNet 是否有任何其他函数来映射产生不同大小矩阵的行。

谢谢。

您似乎在尝试复制矩阵的第一列。例如:

1.0; 2.0         1.0; 1.0; 2.0
3.0; 4.0 becomes 3.0; 3.0; 4.0

如果这是真的,那么代码可以是:

let m = matrix [ [ 1.0; 2.0 ]
                 [ 3.0; 4.0 ] ]
m
|> Matrix.prependCol (m.Column 0)

更新

因为上面的假设不成立

这样就可以得到矩阵行的seq,然后像往常一样用Seq.map进行变换,最后得到结果矩阵:

let transform f m =
    m
    |> Matrix.toRowSeq
    |> Seq.map f
    |> matrix

// or even shorter in F# idiomatic style:
let transform f =
    Matrix.toRowSeq >> Seq.map f >> matrix

// test

let addElementInFront (x : Vector<float>) =
    x.ToArray()
    |> Array.append [| x.[0] |]
    |> vector

matrix [ [ 1.0; 2.0 ]
         [ 3.0; 4.0 ] ]
|> transform addElementInFront