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.LinearAlgebra
的 Matrix.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
我有一个函数可以操纵 Vector<float>
产生一个具有不同长度的新 Vector<float>
,例如在向量
let addElementInfront (x:Vector<float>) =
x.ToArray()
|> Array.append [|x.[0]|]
|> vector
现在我想将它应用于 (2x2) 矩阵的所有行,我希望得到 (2x3) 矩阵,我尝试使用 MathNet.Numerics.LinearAlgebra
的 Matrix.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