Created
March 7, 2015 03:14
-
-
Save kmsquire/ca9886160829eaa5832d to your computer and use it in GitHub Desktop.
select vs select vs nsmallest in Julia
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
julia> include("test_select.jl") | |
sz = 10, n = 5: | |
select : mean: 0.00000065 median 0.00000058 | |
select! : mean: 0.00000043 median 0.00000040 | |
nsmallest: mean: 0.00000112 median 0.00000104 | |
sz = 100, n = 5: | |
select : mean: 0.00000154 median 0.00000133 | |
select! : mean: 0.00000071 median 0.00000068 | |
nsmallest: mean: 0.00000232 median 0.00000219 | |
sz = 100, n = 50: | |
select : mean: 0.00000270 median 0.00000258 | |
select! : mean: 0.00000161 median 0.00000140 | |
nsmallest: mean: 0.00000962 median 0.00000902 | |
sz = 1000, n = 5: | |
select : mean: 0.00001061 median 0.00000778 | |
select! : mean: 0.00000442 median 0.00000408 | |
nsmallest: mean: 0.00000562 median 0.00000519 | |
sz = 1000, n = 50: | |
select : mean: 0.00001140 median 0.00000928 | |
select! : mean: 0.00000534 median 0.00000524 | |
nsmallest: mean: 0.00002582 median 0.00002498 | |
sz = 1000, n = 500: | |
select : mean: 0.00002625 median 0.00002485 | |
select! : mean: 0.00002040 median 0.00001934 | |
nsmallest: mean: 0.00012084 median 0.00010682 | |
sz = 10000, n = 5: | |
select : mean: 0.00008258 median 0.00005986 | |
select! : mean: 0.00004765 median 0.00005017 | |
nsmallest: mean: 0.00001785 median 0.00001747 | |
sz = 10000, n = 50: | |
select : mean: 0.00010093 median 0.00006327 | |
select! : mean: 0.00005606 median 0.00005195 | |
nsmallest: mean: 0.00005383 median 0.00005039 | |
sz = 10000, n = 500: | |
select : mean: 0.00008543 median 0.00008394 | |
select! : mean: 0.00007592 median 0.00007553 | |
nsmallest: mean: 0.00032306 median 0.00027703 | |
sz = 10000, n = 5000: | |
select : mean: 0.00033133 median 0.00028668 | |
select! : mean: 0.00029830 median 0.00028135 | |
nsmallest: mean: 0.00137905 median 0.00122354 | |
sz = 100000, n = 5: | |
select : mean: 0.00079156 median 0.00083955 | |
select! : mean: 0.00055755 median 0.00060999 | |
nsmallest: mean: 0.00013899 median 0.00013791 | |
sz = 100000, n = 50: | |
select : mean: 0.00085652 median 0.00075379 | |
select! : mean: 0.00054414 median 0.00059557 | |
nsmallest: mean: 0.00018883 median 0.00018461 | |
sz = 100000, n = 500: | |
select : mean: 0.00091245 median 0.00084479 | |
select! : mean: 0.00057836 median 0.00051428 | |
nsmallest: mean: 0.00057491 median 0.00054534 | |
sz = 100000, n = 5000: | |
select : mean: 0.00093798 median 0.00069805 | |
select! : mean: 0.00065583 median 0.00064509 | |
nsmallest: mean: 0.00313060 median 0.00306621 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using DataStructures | |
times_select = DefaultDict((Int,Int), Vector{Float64}, ()->Float64[]) | |
times_select! = DefaultDict((Int,Int), Vector{Float64}, ()->Float64[]) | |
times_nsmallest = DefaultDict((Int,Int), Vector{Float64}, ()->Float64[]) | |
# warmup | |
select([1,2,3,4,5], 1:3) | |
nsmallest(3, [1,2,3,4,5]) | |
for sz in [10, 100, 1000, 10000, 100000] | |
for n in [5, 50, 500, 5000] | |
n > sz && continue | |
for iters = 1:div(1000000, sz) | |
c = rand(-sz:sz, sz) | |
c2 = copy(c) | |
t_select = @elapsed select(c, 1:n) # copies c | |
t_select! = @elapsed select!(c, 1:n) # modifies c | |
t_nsmallest = @elapsed nsmallest(n, c2) | |
push!(times_select[(sz, n)], t_select) | |
push!(times_select![(sz, n)], t_select!) | |
push!(times_nsmallest[(sz, n)], t_nsmallest) | |
end | |
times_select_sz_n = times_select[(sz, n)] | |
times_select!_sz_n = times_select![(sz, n)] | |
times_nsmallest_sz_n = times_nsmallest[(sz, n)] | |
@printf("sz = %6d, n = %4d:\n", sz, n) | |
@printf(" select : mean: %010.8f median %010.8f\n", mean(times_select_sz_n), median(times_select_sz_n)) | |
@printf(" select! : mean: %010.8f median %010.8f\n", mean(times_select!_sz_n), median(times_select!_sz_n)) | |
@printf(" nsmallest: mean: %010.8f median %010.8f\n", mean(times_nsmallest_sz_n), median(times_nsmallest_sz_n)) | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment