我有一个操作Vector<float>
的函数,结果是一个新的Vector<float>
,它的长度不同,一个例子是在向量前面附加一个数字
let addElementInfront (x:Vector<float>) =
x.ToArray()
|> Array.append [|x.[0]|]
|> vector
现在,我想将此方法应用于(2x2)矩阵的所有行,并且我希望使用(2x3)矩阵,我尝试使用Matrix.mapRows
的{{1}},但是它给了我错误大小必须相同。
只想知道MathNet是否具有其他功能来映射导致大小矩阵不同的行。
谢谢。
答案 0 :(得分:3)
似乎您正在尝试复制矩阵的第一列。例如:
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.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