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
F# 我是否正确使用Deedle Series.map?_F#_Deedle - Fatal编程技术网

F# 我是否正确使用Deedle Series.map?

F# 我是否正确使用Deedle Series.map?,f#,deedle,F#,Deedle,在对不同的集合进行了一些测试之后,我想看看哪一个表现最好。 我测试了一个数组、seq、list和一系列1000000个点,这些点在0.0和1.0之间均匀随机选取。然后,我将其各自的.map函数应用于sigmoid函数: let sigmoid x = 1. / (1. + exp(-x)) 我然后使用TimeMax dotNETs计算平均执行时间,得到DeDeLe系列的“丑陋”。在我看来,迪德尔对“地图”并不友好。我做得对吗 //*摘要* BenchmarkDotNet=v0.11.5,OS=

在对不同的集合进行了一些测试之后,我想看看哪一个表现最好。 我测试了一个数组、seq、list和一系列1000000个点,这些点在0.0和1.0之间均匀随机选取。然后,我将其各自的.map函数应用于sigmoid函数:

let sigmoid x = 1. / (1. + exp(-x))

我然后使用TimeMax dotNETs计算平均执行时间,得到DeDeLe系列的“丑陋”。在我看来,迪德尔对“地图”并不友好。我做得对吗

//*摘要*
BenchmarkDotNet=v0.11.5,OS=Windows7SP1(6.1.7601.0)
英特尔至强CPU E5-1620 v3 3.50GHz,1个CPU,8个逻辑核和4个物理核
频率=3410126赫兹,分辨率=293.2443纳秒,定时器=TSC
.NET核心SDK=3.0.100-preview5-011568
[主机]:.NET Core 3.0.0-preview5-27626-15(CoreCLR 4.6.27622.75,CoreFX 4.700.19.22408),64位RyuJIT调试[附件]
DefaultJob:.NET Core 3.0.0-preview5-27626-15(CoreCLR 4.6.27622.75,CoreFX 4.700.19.22408),64位RyuJIT
|方法|平均|误差|标准差|第0代|第1代|第2代|分配|
|------------------- |------------:|-----------:|-----------:|-----------:|----------:|----------:|----------:|
|阵列| 21.29毫秒| 0.4217毫秒| 0.9255毫秒| 406.2500 | 406.2500 | 406.2500 | 15.26 MB|
|列表| 173.52毫秒| 2.9243毫秒| 2.7354毫秒| 11250.0000 | 4500.0000 | 1500.0000 | 61.04 MB|
|序列127.90毫微米2.5884毫微米7.4267毫微米36600.0000毫微米183.11毫微米|
|系列| 1751.04毫秒| 37.6797毫秒| 59.7640毫秒| 99000.0000 | 6000.0000 | 6000.0000 | 603.31 MB|

我认为您的测量很可能是正确的。Deedle series无疑在数组上增加了显著的开销——这是因为它还增加了许多额外的功能,用于处理缺失的值以及与series是键值映射这一事实相关的所有特性

如果您正在进行纯数值计算,而不涉及凌乱的数据或带有索引的数据,那么您可能应该使用矩阵操纵库或原始数组

我使用
#time
进行的简单测量如下:

#time 
let rnd = System.Random()
let s = series [ for i in 0 .. 1000000 -> i, rnd.NextDouble() ]
let a = [| for i in 0 .. 1000000 -> rnd.NextDouble() |]

// ~950ms
let r = 1. / (1. + exp(-s))

// ~290ms
s |> Series.map (fun _ v -> 1. / (1. + exp(-v)))

// ~25ms
a |> Array.map (fun v -> 1. / (1. + exp(-v)))

值得注意的是,
Series.map
比直接执行一系列二进制运算符快得多,因为它只需要创建一个新的Series实例。

请不要发布文本截图。复制并粘贴到问题中。我并不感到惊讶。好的旧阵列和往常一样好。我想你可以在Deedle GitHub上发布这个问题?也许他们会给你一些建议,或者可以加快速度?