我正在学习F#,我想学习如何将数据集随机分成10个较小的集合。任何人都有任何想法开始???我应该阅读什么主题???我需要帮助才能继续。谢谢。
答案 0 :(得分:0)
很大程度上取决于你想要实现的目标。您可以使用大多数集合的Permute
功能。下面是一个利用MathNet.Numerics
生成随机索引然后对数据进行混洗的示例。当然你也可以先拆分然后再洗牌。并改用Array.permute
。只需nuget MathNet.Numerics和MathNet.Numerics.FSharp。
#if INTERACTIVE
#r @"../packages/MathNet.Numerics/lib/net461/MathNet.Numerics.dll"
#r @"../packages/MathNet.Numerics.FSharp/lib/net45/MathNet.Numerics.FSharp.dll"
#endif
open System
open MathNet.Numerics
let rnd = System.Random()
let randomData = Array.init 100 (fun _ -> rnd.Next()) // generate the initial data
let randomIndex = (Combinatorics.GeneratePermutation 100) // create a random index
randomIndex
|> Array.map (fun x -> randomData.[x]) //shuffle the data
|> Array.splitInto 10 //split it into 10 subsets
在这种情况下,您的结果将是int
数组。在F#中使用Lists更加惯用。此外,如果您的数据非常大,您可以考虑使用懒惰的Seq
。