Created
January 31, 2014 21:44
-
-
Save jaimefrio/8743836 to your computer and use it in GitHub Desktop.
`np.bincount` benchmarking
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
-------------+---------+-----------------+----------------- | |
bins len | old | new (naive) | new (opt.) | |
-------------+---------+-----------------+----------------- | |
3 3 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
3 10 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
3 30 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
3 100 | 9.8e-07 | 8.3e-07 (1.18x) | 8.2e-07 (1.20x) | |
3 300 | 1.6e-06 | 1.2e-06 (1.33x) | 1.2e-06 (1.33x) | |
3 1000 | 3.0e-06 | 2.5e-06 (1.20x) | 2.5e-06 (1.20x) | |
3 3000 | 7.3e-06 | 6.3e-06 (1.16x) | 7.9e-06 (0.92x) | |
3 10000 | 2.3e-05 | 1.9e-05 (1.21x) | 2.7e-05 (0.85x) | |
3 30000 | 6.6e-05 | 5.6e-05 (1.18x) | 8.3e-05 (0.80x) | |
3 100000 | 2.2e-04 | 1.9e-04 (1.16x) | 2.8e-04 (0.79x) | |
10 3 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
10 10 | 8.3e-07 | 8.2e-07 (1.01x) | 8.2e-07 (1.01x) | |
10 30 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
10 100 | 1.2e-06 | 8.3e-07 (1.45x) | 8.2e-07 (1.46x) | |
10 300 | 1.3e-06 | 1.2e-06 (1.08x) | 1.2e-06 (1.08x) | |
10 1000 | 2.9e-06 | 2.5e-06 (1.16x) | 2.5e-06 (1.16x) | |
10 3000 | 7.0e-06 | 5.8e-06 (1.21x) | 8.3e-06 (0.84x) | |
10 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 2.9e-05 (0.72x) | |
10 30000 | 6.2e-05 | 5.2e-05 (1.19x) | 8.9e-05 (0.70x) | |
10 100000 | 2.1e-04 | 1.7e-04 (1.24x) | 3.0e-04 (0.70x) | |
30 3 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
30 10 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
30 30 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
30 100 | 1.2e-06 | 8.4e-07 (1.43x) | 8.2e-07 (1.46x) | |
30 300 | 1.5e-06 | 1.2e-06 (1.25x) | 1.2e-06 (1.25x) | |
30 1000 | 2.9e-06 | 2.5e-06 (1.16x) | 2.5e-06 (1.16x) | |
30 3000 | 6.8e-06 | 5.9e-06 (1.15x) | 8.3e-06 (0.82x) | |
30 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 2.9e-05 (0.72x) | |
30 30000 | 6.3e-05 | 5.2e-05 (1.21x) | 9.1e-05 (0.69x) | |
30 100000 | 2.1e-04 | 1.7e-04 (1.24x) | 3.0e-04 (0.70x) | |
100 3 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
100 10 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
100 30 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
100 100 | 1.2e-06 | 8.9e-07 (1.35x) | 8.2e-07 (1.46x) | |
100 300 | 1.6e-06 | 1.2e-06 (1.33x) | 1.3e-06 (1.23x) | |
100 1000 | 2.9e-06 | 2.5e-06 (1.16x) | 2.6e-06 (1.12x) | |
100 3000 | 6.8e-06 | 5.9e-06 (1.15x) | 8.2e-06 (0.83x) | |
100 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 3.0e-05 (0.70x) | |
100 30000 | 6.2e-05 | 5.3e-05 (1.17x) | 9.0e-05 (0.69x) | |
100 100000 | 2.1e-04 | 1.8e-04 (1.17x) | 3.1e-04 (0.68x) | |
300 3 | 8.2e-07 | 8.2e-07 (1.00x) | 8.2e-07 (1.00x) | |
300 10 | 8.3e-07 | 8.3e-07 (1.00x) | 8.3e-07 (1.00x) | |
300 30 | 8.4e-07 | 8.4e-07 (1.00x) | 8.3e-07 (1.01x) | |
300 100 | 1.2e-06 | 9.6e-07 (1.25x) | 8.6e-07 (1.40x) | |
300 300 | 1.7e-06 | 1.2e-06 (1.42x) | 1.2e-06 (1.42x) | |
300 1000 | 2.9e-06 | 2.5e-06 (1.16x) | 2.5e-06 (1.16x) | |
300 3000 | 7.1e-06 | 5.9e-06 (1.20x) | 8.2e-06 (0.87x) | |
300 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 2.9e-05 (0.72x) | |
300 30000 | 6.1e-05 | 5.0e-05 (1.22x) | 8.9e-05 (0.69x) | |
300 100000 | 2.1e-04 | 1.7e-04 (1.24x) | 3.0e-04 (0.70x) | |
1000 3 | 8.3e-07 | 8.3e-07 (1.00x) | 8.3e-07 (1.00x) | |
1000 10 | 8.3e-07 | 8.3e-07 (1.00x) | 8.3e-07 (1.00x) | |
1000 30 | 1.0e-06 | 8.3e-07 (1.20x) | 8.3e-07 (1.20x) | |
1000 100 | 1.2e-06 | 1.2e-06 (1.00x) | 1.1e-06 (1.09x) | |
1000 300 | 1.6e-06 | 1.4e-06 (1.14x) | 1.2e-06 (1.33x) | |
1000 1000 | 3.1e-06 | 2.6e-06 (1.19x) | 2.6e-06 (1.19x) | |
1000 3000 | 6.9e-06 | 5.8e-06 (1.19x) | 8.2e-06 (0.84x) | |
1000 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 2.9e-05 (0.72x) | |
1000 30000 | 6.3e-05 | 5.1e-05 (1.24x) | 8.8e-05 (0.72x) | |
1000 100000 | 2.0e-04 | 1.7e-04 (1.18x) | 3.0e-04 (0.67x) | |
3000 3 | 1.2e-06 | 1.1e-06 (1.09x) | 1.2e-06 (1.00x) | |
3000 10 | 1.2e-06 | 1.2e-06 (1.00x) | 1.2e-06 (1.00x) | |
3000 30 | 1.2e-06 | 1.3e-06 (0.92x) | 1.2e-06 (1.00x) | |
3000 100 | 1.6e-06 | 1.3e-06 (1.23x) | 1.2e-06 (1.33x) | |
3000 300 | 2.1e-06 | 1.7e-06 (1.24x) | 1.7e-06 (1.24x) | |
3000 1000 | 3.7e-06 | 2.9e-06 (1.28x) | 2.9e-06 (1.28x) | |
3000 3000 | 7.6e-06 | 6.2e-06 (1.23x) | 8.7e-06 (0.87x) | |
3000 10000 | 2.1e-05 | 1.8e-05 (1.17x) | 3.0e-05 (0.70x) | |
3000 30000 | 6.2e-05 | 5.1e-05 (1.22x) | 8.9e-05 (0.70x) | |
3000 100000 | 2.0e-04 | 1.7e-04 (1.18x) | 3.0e-04 (0.67x) | |
10000 3 | 2.2e-06 | 2.5e-06 (0.88x) | 2.5e-06 (0.88x) | |
10000 10 | 2.2e-06 | 2.6e-06 (0.85x) | 2.5e-06 (0.88x) | |
10000 30 | 2.5e-06 | 2.6e-06 (0.96x) | 2.5e-06 (1.00x) | |
10000 100 | 2.5e-06 | 2.8e-06 (0.89x) | 2.6e-06 (0.96x) | |
10000 300 | 3.1e-06 | 3.0e-06 (1.03x) | 3.1e-06 (1.00x) | |
10000 1000 | 8.7e-06 | 8.1e-06 (1.07x) | 1.0e-05 (0.87x) | |
10000 10000 | 2.3e-05 | 2.0e-05 (1.15x) | 3.2e-05 (0.72x) | |
10000 30000 | 6.4e-05 | 5.5e-05 (1.16x) | 9.3e-05 (0.69x) | |
10000 100000 | 2.1e-04 | 1.8e-04 (1.17x) | 3.1e-04 (0.68x) | |
-------------+---------+-----------------+----------------- | |
(*) Timings are averages of 100 runs of `np.bincount(x)` where | |
`x = np.random.randint(bins, size=len)`. The naive method | |
simply checks each item against the min and max in a single | |
loop of the array, while the optimized one takes items in | |
pairs, compares them to each other, then checks the smaller | |
against the min and the largest against the max, so it does | |
only 3 comparisons for every 2 items, instead of 3 per item. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment