Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays F#在多维数组中写入值_Arrays_F# - Fatal编程技术网

Arrays F#在多维数组中写入值

Arrays F#在多维数组中写入值,arrays,f#,Arrays,F#,我想计算协方差矩阵 运算符“expr.[idx]”已用于不确定的对象 基于此程序点之前的信息键入。考虑加入 进一步的类型约束 CovMatrix[a,b] 如何解决这个问题以及为什么会发生 let FirstSeq = {1.0..10.0} let SecondSeq = {20.0..30.0} let All = seq {yield (0,FirstSeq); yield (1,SecondSeq)} let cov(first:seq<float>)(second:se

我想计算协方差矩阵

运算符“expr.[idx]”已用于不确定的对象 基于此程序点之前的信息键入。考虑加入 进一步的类型约束

CovMatrix[a,b]

如何解决这个问题以及为什么会发生

let FirstSeq = {1.0..10.0}
let SecondSeq = {20.0..30.0}

let All = seq {yield (0,FirstSeq); yield (1,SecondSeq)}

let cov(first:seq<float>)(second:seq<float>) =
    Seq.map2 (*) first second
    |> Seq.average
    |> fun x -> x - Seq.average first * Seq.average second

let CreateCovMatrix(strangeList:seq<int * seq<float>>) = 
    let Size = Seq.length strangeList
    let CovMatrix = Array2D.init Size Size
    let CalculateCovMatrix = 
        for (a, i) in strangeList do
            for (b, j) in strangeList do
                    CovMatrix.[a,b]=cov(i)(j)
    CalculateCovMatrix

let result = CreateCovMatrix(All)
printf "%A" result
let FirstSeq={1.0..10.0}
设SecondSeq={20.0..30.0}
设All=seq{yield(0,FirstSeq);yield(1,SecondSeq)}
let cov(第一个:序号)(第二个:序号)=
Seq.map2(*)第一秒
|>序号:平均数
|>乐趣x->x-顺序平均第一*顺序平均第二
让CreateCovMatrix(奇怪列表:seq)=
let Size=序列长度列表
设CovMatrix=Array2D.init Size
让CalculateCovMatrix=
对于陌生列表中的(a,i)怎么办
对于奇异列表中的(b,j)do
cov矩阵[a,b]=cov(i)(j)
计算向量矩阵
让结果=CreateCovMatrix(全部)
printf“%A”结果

函数
Array2D.init
包含3个参数,您缺少最后一个参数,即初始化函数

您可以通过以下方式快速修复:

let CovMatrix = Array2D.init Size Size (fun _ _ -> 0.)

然后您将发现下一个问题:可变引用的赋值是
这种数学是函数编程的优势所在,
尽管你目前居住在命令式范例中。Gustavo处理了您的警告,但即使如此,您的函数也不会给出期望的结果。混合函数和命令概念
CreateCovMatrix
现在返回
unit

好命令:

let createCovMatrix(strangeList:seq<int * seq<float>>) = 
    let size = Seq.length strangeList
    let covMatrix = Array2D.zeroCreate size size
    for (a, i) in strangeList do
        for (b, j) in strangeList do
            covMatrix.[a,b]<-cov(i)(j)
    covMatrix
多功能:

let createCovMatrix strangeList = 
    strangeList 
    |> Seq.map (fun (a, i) -> Seq.map (fun (b, j) -> cov i j) strangeList)
    |> array2D
let createCovMatrix strangeList = 
    let mapper f = Seq.map f strangeList
    mapper (fun (a, i) -> mapper (fun (b, j) -> cov i j))
    |> array2D

谢谢!这对我来说非常有用,因为我才刚刚开始做函数式编程!
let createCovMatrix strangeList = 
    strangeList 
    |> Seq.map (fun (a, i) -> Seq.map (fun (b, j) -> cov i j) strangeList)
    |> array2D
let createCovMatrix strangeList = 
    let mapper f = Seq.map f strangeList
    mapper (fun (a, i) -> mapper (fun (b, j) -> cov i j))
    |> array2D