Arrays F#在多维数组中写入值
我想计算协方差矩阵 运算符“expr.[idx]”已用于不确定的对象 基于此程序点之前的信息键入。考虑加入 进一步的类型约束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
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