Захватывающий.Мне нужно было повысить скорость серии циклов, которые должны выполнять сопоставление индекса таким же образом.Поэтому я решил найти здесь все решения, а также некоторые риффы.
Вот мои тесты скорости для Python 2.7.10:
import timeit
timeit.timeit('N.any(N.in1d(sids, val))', setup = 'import numpy as N; val = 20010401020091; sids = N.array([20010401010101+x for x in range(1000)])')
18.86137104034424
timeit.timeit('val in sids', setup = 'import numpy as N; val = 20010401020091; sids = [20010401010101+x for x in range(1000)]')
15.061666011810303
timeit.timeit('N.in1d(sids, val)', setup = 'import numpy as N; val = 20010401020091; sids = N.array([20010401010101+x for x in range(1000)])')
11.613027095794678
timeit.timeit('N.any(val == sids)', setup = 'import numpy as N; val = 20010401020091; sids = N.array([20010401010101+x for x in range(1000)])')
7.670552015304565
timeit.timeit('val in sids', setup = 'import numpy as N; val = 20010401020091; sids = N.array([20010401010101+x for x in range(1000)])')
5.610057830810547
timeit.timeit('val == sids', setup = 'import numpy as N; val = 20010401020091; sids = N.array([20010401010101+x for x in range(1000)])')
1.663232291616* 0,0548710823059082
timeit.timeit('val in sids', setup = 'import numpy as N; val = 20010401020091; sids = dict(zip([20010401010101+x for x in range(1000)],[True,]*1000))')
0,054754018783569336
Очень удивительно!Разница в порядках!
Подводя итог, если вы просто хотите узнать, есть ли что-то в одномерном списке или нет:
- 19s N.any (N.in1d (массив numpy))
- 15 с x in (список)
- 8 с N.any (x == массив numpy)
- 6 s x in (массив numpy)
- .1 с x в (набор или словарь)
Если вы также хотите узнать, где что-то есть в списке (порядок важен):
- 12s N.in1d(x, массив numpy)
- 2s x == (массив numpy)