Advertisement
Guest User

Untitled

a guest
Apr 24th, 2014
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. open System
  2.  
  3. type CategoryAssessment =
  4. { fieldIndex: int
  5. value: int
  6. ruleAssessments: int[] }
  7.  
  8. let InitAssessment categorizeFields rules =
  9. let ruleAssessments = Array.create (Array.length rules) 0
  10. Array.map (fun categorizeField ->
  11. let fieldIndex, categoryValue = categorizeField
  12. { CategoryAssessment.fieldIndex = fieldIndex;
  13. value = categoryValue;
  14. ruleAssessments = ruleAssessments })
  15. categorizeFields
  16.  
  17. let AssessCategory ruleMatches (row : int[]) categoryAssessment =
  18. let fieldIndex = categoryAssessment.fieldIndex
  19. let categoryValue = categoryAssessment.value
  20. let categoryMatch = categoryValue = row.[fieldIndex]
  21. let newRuleAssessments =
  22. Array.map2 (fun ruleAssessment ruleMatch ->
  23. if ruleMatch = categoryMatch then
  24. ruleAssessment + 1
  25. else
  26. ruleAssessment)
  27. categoryAssessment.ruleAssessments
  28. ruleMatches
  29. { categoryAssessment with ruleAssessments = newRuleAssessments }
  30.  
  31. let MatchRule (row : int[]) rule =
  32. let fieldIndex, eqVal = rule
  33. row.[fieldIndex] = eqVal
  34.  
  35. let Assess categorizeFields rules input =
  36. printfn "START - Assess"
  37. let d =
  38. Array.fold (fun categoryAssessment row ->
  39. let ruleMatches = Array.map (MatchRule row) rules
  40. Array.map (AssessCategory ruleMatches row) categoryAssessment)
  41. (InitAssessment categorizeFields rules)
  42. input
  43. printfn "END - Assess"
  44. d
  45.  
  46. let JoinAssessments assessments =
  47. let numAssessments = Array.length assessments
  48. Array.fold (fun accAssessment assessment ->
  49. Array.map2 (fun accCategory category ->
  50. let newRuleAssessments =
  51. Array.map2 (+)
  52. accCategory.ruleAssessments
  53. category.ruleAssessments
  54. { accCategory with
  55. ruleAssessments = newRuleAssessments })
  56. accAssessment
  57. assessment)
  58. assessments.[0]
  59. assessments.[1..(numAssessments-1)]
  60.  
  61.  
  62. let numRecords = 10000
  63. let numFields = 20
  64. let numSplits = 10
  65. let numRules = 10000
  66. let inputs = Array.create numSplits
  67. [| for i in 1 .. (numRecords / numSplits) ->
  68. [| for j in 1 .. numFields ->
  69. (i % 10) + j |] |]
  70. let categorizeFields = [| (1, 6); (2, 3); (2, 4); (3, 2) |]
  71. let rules = [| for i in 1 .. numRules -> (i % numFields, i) |]
  72.  
  73. let assessments =
  74. Array.Parallel.map (Assess categorizeFields rules) inputs
  75. |> JoinAssessments
  76. printfn "Assessments: %A" assessments
  77. 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement