小编fs_*_*ech的帖子

float数组,float []和double []是不同的,还是相同的?

我正在编写我的代码,好像这些都是一样的,并且没有任何问题,但是当我将鼠标悬停在Visual Studio中的某个函数上并且看到类型定义包含我认为的3种不同类型时,它开始让我感到困惑全都一样.它们是一样的吗?还是他们不一样?

f#

7
推荐指数
2
解决办法
1712
查看次数

如何将函数应用于浮点数组?

假设我有n个数组,其中n是一个变量(某个数字大于2,通常小于10).

每个数组都有k个元素.

我还有一个长度为n的数组,其中包含一组权重,用于指示我如何线性组合所有数组.

我正在尝试创建一个高性能的高阶函数,以便在F#中组合这些数组.

我怎么能这样做,以便我得到一个函数,它接受一个数组(arrs是一个样本),一个权重数组(权重),然后根据权重计算一个加权和?

let weights = [|.6;;.3;.1|]

let arrs = [| [|.0453;.065345;.07566;1.562;356.6|] ; 
              [|.0873;.075565;.07666;1.562222;3.66|] ; 
              [|.06753;.075675;.04566;1.452;3.4556|] |]
Run Code Online (Sandbox Code Playgroud)

谢谢你的想法.

f#

2
推荐指数
1
解决办法
957
查看次数

如何编写一个返回数组y中数组索引数组的函数?

我正在尝试编写一个有效的算法,它将有效地让我合并数据集(如sql join).我想我需要使用Array.tryFindIndex,但语法让我迷失了.

根据下面的数据,我调用arrX我的"主机"数组,并希望返回一个有长度的int数组,并告诉我arrY中每个元素的位置(如果不在那里则返回-1) .(一旦我知道这些索引,我就可以在长度为arrY.length的数据数组上使用它们)

let arrX= [|"A";"B";"C";"D";"E";"F"|]
let arrY = [|"E";"A";"C"|];


let desiredIndices = [|1; -1; 2; -1; 0; -1|]
Run Code Online (Sandbox Code Playgroud)

看起来我需要以某种方式使用选项类型,我认为那里也有mapi2.有谁知道怎么做到这一点?(我认为对于那些合并来自不同来源的数据集的人来说,这可能是一个非常有用的代码片段)

谢谢!

//This code does not compile, can't figure out what to do here
let d = Array.tryFindIndex (fun x y -> x = y) arrX
Run Code Online (Sandbox Code Playgroud)

f#

2
推荐指数
1
解决办法
1658
查看次数

如何生成指数权重数组?

我试图做一个"展开" - (我认为),从一个初始值开始,重复应用一些函数,然后得到一个序列作为结果.

在这个例子中,我试图从1.0开始,将它乘以.80,并做4次,这样我最终得到一个数组= [| 1.0; 0.80; 0.64; 0.512 |]

VS 2010说我以无效的方式使用"i",并且闭包不能捕获可变值 - 所以这个函数不能编译.任何人都可以建议一个真正有效的干净方法吗?谢谢.

let expSeries seed fade n = 
//take see and repeatedly multiply it by the fade factor n times...
    let mutable i = 0;
    let mutable weight = seed;
    [| while(i < n) do
          yield weight;
          weight <- weight * fade |]

let testWeights = expSeries 1.0 0.80 4
Run Code Online (Sandbox Code Playgroud)

f#

2
推荐指数
1
解决办法
284
查看次数

如何将真正的int32 []的System.Object转换为double []?

我从第三方API获取数据,它只是给了我一个System.Object,我知道它是一个双重的[].为了处理这种返回类型,我发现下面的代码工作得非常好.但是,我还得到了一些同样伪装成System.Object的int []数组,特别是以YYYYMMDD形式的日期(例如20100310).

转换为float失败,它只是说指定的强制转换是无效的.有没有人知道如何使整数工作?

let oIsNull (obj : System.Object) = obj = null
let oIsArray (obj : System.Object) = obj.GetType().IsArray

let o2f (obj : System.Object) = 
    let mutable arr = [|Double.NaN|]
    if (oIsNull obj = false) && (oIsArray obj = true) then
        let objArr = obj :?> obj[]
        let u = objArr.GetUpperBound(0)
        let floatArr : float[] = Array.zeroCreate (u  + 1);
        for i in 0..u do 
            if objArr.[i] = null then
                floatArr.[i] <- Double.NaN
            else 
                let t = objArr.[i].GetType() 
                floatArr.[i] <- …
Run Code Online (Sandbox Code Playgroud)

f#

2
推荐指数
1
解决办法
1980
查看次数

如何从数组创建一个间隔元组?

我正在尝试构建一个通用数值函数来获取一个浮点数组,然后返回一个元组数组,将数组分解为N个相等距离的范围,其中每个元组代表每个范围的下限和上限.结果数组中第一个元组的第一个元素应该是输入数组的最小值,结果数组中最后一个元组的第二个元素应该是输入数组的最大值.

我的问题是我正在尝试使用模式匹配解决这个问题,我的代码编译,但它没有创建任何东西(?)我得到一个警告说第3个模式永远不会匹配.我很困惑,因为我认为我已经涵盖了所有案例 - 第一,最后,然后介于两者之间.在此先感谢有关如何修复此代码的任何好主意.

let rand1000 = [| for i in 1..1000 do yield rnd.NextDouble() |]


let intervals (arr: float array) (n : int) =
    let L = Array.min(arr);
    let U = Array.max(arr);
    let increment = U - L / (float n);
    let maxGroup = n-1;
    [| for i in 0..maxGroup do 
          let range = match i with
                      | 0 -> L, L + increment
                      | maxGroup -> L + (float n) * increment, U
                      | _ -> L + …
Run Code Online (Sandbox Code Playgroud)

f#

1
推荐指数
1
解决办法
364
查看次数

标签 统计

f# ×6