Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. SeedRandom[1];
  2. data = RandomReal[1, 10]
  3. (*
  4. {0.817389, 0.11142, 0.789526, 0.187803, 0.241361,
  5. 0.0657388, 0.542247, 0.231155, 0.396006, 0.700474}
  6. *)
  7.  
  8. nf = Evaluate@ Interpolation[Transpose@{-data, data}, InterpolationOrder -> 0,
  9. "ExtrapolationHandler" -> {With[{m = -Max[data]},
  10. Piecewise[{{-m, # < m}}, Indeterminate] &],
  11. "WarningMessage" -> False}
  12. ][-#] &;
  13.  
  14. Plot[nf[x], {x, -0.5, 1.5},
  15. Epilog -> {Red, PointSize@Medium, Point[Transpose@{data, data}]}]
  16.  
  17. SeedRandom[1];
  18. data = RandomReal[1, 1000000];
  19.  
  20. nf = Evaluate@ Interpolation[Transpose@{-data, data}, InterpolationOrder -> 0,
  21. "ExtrapolationHandler" -> {With[{m = -Max[data]},
  22. Piecewise[{{-m, # < m}}, Indeterminate] &],
  23. "WarningMessage" -> False}
  24. ][-#] &; // RepeatedTiming
  25. nf /@ RandomReal[1, 1000]; // RepeatedTiming
  26. (*
  27. {1.43, Null}
  28. {0.0043, Null}
  29. *)
  30.  
  31. (* Sascha's distance function dist[] *)
  32. nf2 = Nearest[data, DistanceFunction -> dist]; // RepeatedTiming
  33. nf2 /@ RandomReal[1, 2]; // RepeatedTiming
  34. (*
  35. {0.000015, Null}
  36. {4.4, Null}
  37. *)
  38.  
  39. Length@data 1000 10000 100000 1000000
  40. nf2/nf 700 7000 60000 600000
  41.  
  42. dist[u_, x_] := 1000000 (* some big number *) /; x > u
  43. dist[u_, x_] := Abs[u - x]
  44.  
  45. Nearest[{1, 2, 2.9, 3, 4} , 2.99, DistanceFunction -> dist]
  46. (* 2.9 *)
  47.  
  48. findL[x_, val_] := Max[Select[x, # < val &]];
  49.  
  50. Plot[findL[x, t], {t, 0, 1}]
  51.  
  52. fun[c_, lst_] :=
  53. Reap[Sow[#, Sign[# - c]] & /@ lst, -1, Last[Sort@#2] &][[-1, 1]]
  54.  
  55. pts = {0.817389, 0.11142, 0.789526, 0.187803, 0.241361, 0.0657388,
  56. 0.542247, 0.231155, 0.396006, 0.700474};
  57. Plot[Quiet@fun[x, pts], {x, 0, 1.5},
  58. Epilog -> {Red, PointSize@Medium, Point[Transpose@{pts, pts}]}]
  59.  
  60. LeftValue[s_] := LeftValueFunction[s, Nearest[s -> "Index"]]
  61. LeftValue[s_, list_] := LeftValue[s][list]
  62.  
  63. LeftValueFunction[s_, nf_][n_] := First @ LeftValueFunction[s, nf][{n}]
  64.  
  65. LeftValueFunction[s_,nf_][list_List] := With[
  66. {n=nf[list][[All,1]]},
  67. s[[n - UnitStep[s[[n]]-list] ]]
  68. ]
  69.  
  70. SeedRandom[1];
  71. data = Sort @ RandomReal[1, 10^6];
  72.  
  73. nf = Evaluate @ Interpolation[
  74. Transpose@{-data,data},
  75. InterpolationOrder->0,
  76. "ExtrapolationHandler"->{With[{m=-Max[data]},Piecewise[{{-m,#<m}},Indeterminate]&],
  77. "WarningMessage"->False}
  78. ][-#]&; //RepeatedTiming
  79.  
  80. lvf = LeftValue[data]; //RepeatedTiming
  81.  
  82. testdata = RandomReal[1, 10^3];
  83.  
  84. r1 = nf /@ testdata; //RepeatedTiming
  85. r2 = lvf[testdata]; //RepeatedTiming
  86.  
  87. r1 === r2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement