Skip to content

Commit 361a91b

Browse files
committed
Create new multiindex_object.py
1 parent 82315d5 commit 361a91b

File tree

2 files changed

+142
-137
lines changed

2 files changed

+142
-137
lines changed

asv_bench/benchmarks/index_object.py

+2-137
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import string
2-
31
import numpy as np
42
import pandas.util.testing as tm
5-
from pandas import (Series, date_range, DatetimeIndex, Index, MultiIndex,
6-
RangeIndex, Float64Index)
3+
from pandas import (Series, date_range, DatetimeIndex, Index, RangeIndex,
4+
Float64Index)
75

86
from .pandas_vb_common import setup # noqa
97

@@ -86,66 +84,6 @@ def time_modulo(self, dtype):
8684
self.index % 2
8785

8886

89-
class Duplicated(object):
90-
91-
goal_time = 0.2
92-
93-
def setup(self):
94-
n, k = 200, 5000
95-
levels = [np.arange(n),
96-
tm.makeStringIndex(n).values,
97-
1000 + np.arange(n)]
98-
labels = [np.random.choice(n, (k * n)) for lev in levels]
99-
self.mi = MultiIndex(levels=levels, labels=labels)
100-
101-
def time_duplicated(self):
102-
self.mi.duplicated()
103-
104-
105-
class Sortlevel(object):
106-
107-
goal_time = 0.2
108-
109-
def setup(self):
110-
n = 1182720
111-
low, high = -4096, 4096
112-
arrs = [np.repeat(np.random.randint(low, high, (n // k)), k)
113-
for k in [11, 7, 5, 3, 1]]
114-
self.mi_int = MultiIndex.from_arrays(arrs)[np.random.permutation(n)]
115-
116-
a = np.repeat(np.arange(100), 1000)
117-
b = np.tile(np.arange(1000), 100)
118-
self.mi = MultiIndex.from_arrays([a, b])
119-
self.mi = self.mi.take(np.random.permutation(np.arange(100000)))
120-
121-
def time_sortlevel_int64(self):
122-
self.mi_int.sortlevel()
123-
124-
def time_sortlevel_zero(self):
125-
self.mi.sortlevel(0)
126-
127-
def time_sortlevel_one(self):
128-
self.mi.sortlevel(1)
129-
130-
131-
class MultiIndexValues(object):
132-
133-
goal_time = 0.2
134-
135-
def setup_cache(self):
136-
137-
level1 = range(1000)
138-
level2 = date_range(start='1/1/2012', periods=100)
139-
mi = MultiIndex.from_product([level1, level2])
140-
return mi
141-
142-
def time_datetime_level_values_copy(self, mi):
143-
mi.copy().values
144-
145-
def time_datetime_level_values_sliced(self, mi):
146-
mi[:10].values
147-
148-
14987
class Range(object):
15088

15189
goal_time = 0.2
@@ -237,76 +175,3 @@ def setup(self):
237175

238176
def time_get_loc(self):
239177
self.ind.get_loc(0)
240-
241-
242-
class MultiIndexGet(object):
243-
244-
goal_time = 0.2
245-
246-
def setup(self):
247-
self.mi_large = MultiIndex.from_product(
248-
[np.arange(1000), np.arange(20), list(string.ascii_letters)],
249-
names=['one', 'two', 'three'])
250-
self.mi_med = MultiIndex.from_product(
251-
[np.arange(1000), np.arange(10), list('A')],
252-
names=['one', 'two', 'three'])
253-
self.mi_small = MultiIndex.from_product(
254-
[np.arange(100), list('A'), list('A')],
255-
names=['one', 'two', 'three'])
256-
257-
def time_multiindex_large_get_loc(self):
258-
self.mi_large.get_loc((999, 19, 'Z'))
259-
260-
def time_multiindex_large_get_loc_warm(self):
261-
for _ in range(1000):
262-
self.mi_large.get_loc((999, 19, 'Z'))
263-
264-
def time_multiindex_med_get_loc(self):
265-
self.mi_med.get_loc((999, 9, 'A'))
266-
267-
def time_multiindex_med_get_loc_warm(self):
268-
for _ in range(1000):
269-
self.mi_med.get_loc((999, 9, 'A'))
270-
271-
def time_multiindex_string_get_loc(self):
272-
self.mi_small.get_loc((99, 'A', 'A'))
273-
274-
def time_multiindex_small_get_loc_warm(self):
275-
for _ in range(1000):
276-
self.mi_small.get_loc((99, 'A', 'A'))
277-
278-
279-
class MultiIndexDuplicates(object):
280-
281-
goal_time = 0.2
282-
283-
def setup(self):
284-
size = 65536
285-
arrays = [np.random.randint(0, 8192, size),
286-
np.random.randint(0, 1024, size)]
287-
mask = np.random.rand(size) < 0.1
288-
self.mi_unused_levels = MultiIndex.from_arrays(arrays)
289-
self.mi_unused_levels = self.mi_unused_levels[mask]
290-
291-
def time_remove_unused_levels(self):
292-
self.mi_unused_levels.remove_unused_levels()
293-
294-
295-
class MultiIndexInteger(object):
296-
297-
goal_time = 0.2
298-
299-
def setup(self):
300-
self.mi_int = MultiIndex.from_product([np.arange(1000),
301-
np.arange(1000)],
302-
names=['one', 'two'])
303-
self.obj_index = np.array([(0, 10), (0, 11), (0, 12),
304-
(0, 13), (0, 14), (0, 15),
305-
(0, 16), (0, 17), (0, 18),
306-
(0, 19)], dtype=object)
307-
308-
def time_get_indexer(self):
309-
self.mi_int.get_indexer(self.obj_index)
310-
311-
def time_is_monotonic(self):
312-
self.mi_int.is_monotonic
+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import string
2+
3+
import numpy as np
4+
import pandas.util.testing as tm
5+
from pandas import date_range, MultiIndex
6+
7+
from .pandas_vb_common import setup # noqa
8+
9+
10+
class GetLoc(object):
11+
12+
goal_time = 0.2
13+
14+
def setup(self):
15+
self.mi_large = MultiIndex.from_product(
16+
[np.arange(1000), np.arange(20), list(string.ascii_letters)],
17+
names=['one', 'two', 'three'])
18+
self.mi_med = MultiIndex.from_product(
19+
[np.arange(1000), np.arange(10), list('A')],
20+
names=['one', 'two', 'three'])
21+
self.mi_small = MultiIndex.from_product(
22+
[np.arange(100), list('A'), list('A')],
23+
names=['one', 'two', 'three'])
24+
25+
def time_large_get_loc(self):
26+
self.mi_large.get_loc((999, 19, 'Z'))
27+
28+
def time_large_get_loc_warm(self):
29+
for _ in range(1000):
30+
self.mi_large.get_loc((999, 19, 'Z'))
31+
32+
def time_med_get_loc(self):
33+
self.mi_med.get_loc((999, 9, 'A'))
34+
35+
def time_med_get_loc_warm(self):
36+
for _ in range(1000):
37+
self.mi_med.get_loc((999, 9, 'A'))
38+
39+
def time_string_get_loc(self):
40+
self.mi_small.get_loc((99, 'A', 'A'))
41+
42+
def time_small_get_loc_warm(self):
43+
for _ in range(1000):
44+
self.mi_small.get_loc((99, 'A', 'A'))
45+
46+
47+
class Duplicates(object):
48+
49+
goal_time = 0.2
50+
51+
def setup(self):
52+
size = 65536
53+
arrays = [np.random.randint(0, 8192, size),
54+
np.random.randint(0, 1024, size)]
55+
mask = np.random.rand(size) < 0.1
56+
self.mi_unused_levels = MultiIndex.from_arrays(arrays)
57+
self.mi_unused_levels = self.mi_unused_levels[mask]
58+
59+
def time_remove_unused_levels(self):
60+
self.mi_unused_levels.remove_unused_levels()
61+
62+
63+
class Integer(object):
64+
65+
goal_time = 0.2
66+
67+
def setup(self):
68+
self.mi_int = MultiIndex.from_product([np.arange(1000),
69+
np.arange(1000)],
70+
names=['one', 'two'])
71+
self.obj_index = np.array([(0, 10), (0, 11), (0, 12),
72+
(0, 13), (0, 14), (0, 15),
73+
(0, 16), (0, 17), (0, 18),
74+
(0, 19)], dtype=object)
75+
76+
def time_get_indexer(self):
77+
self.mi_int.get_indexer(self.obj_index)
78+
79+
def time_is_monotonic(self):
80+
self.mi_int.is_monotonic
81+
82+
83+
class Duplicated(object):
84+
85+
goal_time = 0.2
86+
87+
def setup(self):
88+
n, k = 200, 5000
89+
levels = [np.arange(n),
90+
tm.makeStringIndex(n).values,
91+
1000 + np.arange(n)]
92+
labels = [np.random.choice(n, (k * n)) for lev in levels]
93+
self.mi = MultiIndex(levels=levels, labels=labels)
94+
95+
def time_duplicated(self):
96+
self.mi.duplicated()
97+
98+
99+
class Sortlevel(object):
100+
101+
goal_time = 0.2
102+
103+
def setup(self):
104+
n = 1182720
105+
low, high = -4096, 4096
106+
arrs = [np.repeat(np.random.randint(low, high, (n // k)), k)
107+
for k in [11, 7, 5, 3, 1]]
108+
self.mi_int = MultiIndex.from_arrays(arrs)[np.random.permutation(n)]
109+
110+
a = np.repeat(np.arange(100), 1000)
111+
b = np.tile(np.arange(1000), 100)
112+
self.mi = MultiIndex.from_arrays([a, b])
113+
self.mi = self.mi.take(np.random.permutation(np.arange(100000)))
114+
115+
def time_sortlevel_int64(self):
116+
self.mi_int.sortlevel()
117+
118+
def time_sortlevel_zero(self):
119+
self.mi.sortlevel(0)
120+
121+
def time_sortlevel_one(self):
122+
self.mi.sortlevel(1)
123+
124+
125+
class Values(object):
126+
127+
goal_time = 0.2
128+
129+
def setup_cache(self):
130+
131+
level1 = range(1000)
132+
level2 = date_range(start='1/1/2012', periods=100)
133+
mi = MultiIndex.from_product([level1, level2])
134+
return mi
135+
136+
def time_datetime_level_values_copy(self, mi):
137+
mi.copy().values
138+
139+
def time_datetime_level_values_sliced(self, mi):
140+
mi[:10].values

0 commit comments

Comments
 (0)