我正在编写我的代码,好像这些都是一样的,并且没有任何问题,但是当我将鼠标悬停在Visual Studio中的某个函数上并且看到类型定义包含我认为的3种不同类型时,它开始让我感到困惑全都一样.它们是一样的吗?还是他们不一样?
假设我有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)
谢谢你的想法.
我正在尝试编写一个有效的算法,它将有效地让我合并数据集(如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) 我试图做一个"展开" - (我认为),从一个初始值开始,重复应用一些函数,然后得到一个序列作为结果.
在这个例子中,我试图从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) 我从第三方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) 我正在尝试构建一个通用数值函数来获取一个浮点数组,然后返回一个元组数组,将数组分解为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# ×6