F# 使用管道对矩阵中的列进行迭代
我试图将矩阵除以最后一行,每列除以最后一个元素,也就是齐次坐标,然后返回包含除最后一行以外的所有内容的子矩阵。 在Matlab中类似这样的内容:F# 使用管道对矩阵中的列进行迭代,f#,linear-algebra,mathnet-numerics,F#,Linear Algebra,Mathnet Numerics,我试图将矩阵除以最后一行,每列除以最后一个元素,也就是齐次坐标,然后返回包含除最后一行以外的所有内容的子矩阵。 在Matlab中类似这样的内容: normx = bsxfun(@rdivide,A,A(end,:)); output = normx(1:end-1,:); 由于我是F的新手,我对任何事情都不太确定,但我尝试了以下方法: let hnorm(A:Matrix<double>) = let partialResult = A |> Matrix.iter
normx = bsxfun(@rdivide,A,A(end,:));
output = normx(1:end-1,:);
由于我是F的新手,我对任何事情都不太确定,但我尝试了以下方法:
let hnorm(A:Matrix<double>) =
let partialResult = A |> Matrix.iterCols (fun col -> col/col.[col.Count-1])
partialResult.Rows(0,3)
工作顺利
请有人解释一下如何做到这一点,因为我认为我遗漏了一些基本知识或误解了它们
谢谢 如果您在IDE中查看Matrix.iterCols的签名,您将看到它使用的参数是函数向量如果您在IDE中查看Matrix.iterCols的签名,您将看到它使用的参数是函数向量使用mapCols。在F中有一个惯例,iterXXX函数用于副作用。使用mapCols。在F中有一个约定iterXXX函数用于副作用。谢谢!就这样。另外一个问题,既然我要写idx,我就不用它了,在Matlab中有没有像~这样的省略符号?也许smth喜欢有趣的[col->col/col.[col.Count-1]?是的,这正是语法。您可以对不关心的变量使用下划线!就这样。另外一个问题,既然我要写idx,我就不用它了,在Matlab中有没有像~这样的省略符号?也许smth喜欢有趣的[col->col/col.[col.Count-1]?是的,这正是语法。可以对不关心的变量使用下划线
let result = [2;4;6] |> List.map (fun x -> x * x * x)
let partialResult = A |> Matrix.mapCols (fun idx col -> col/col.[col.Count-1])