Skip to content

Instantly share code, notes, and snippets.

@yanolab
Created August 8, 2011 07:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yanolab/1131343 to your computer and use it in GitHub Desktop.
Save yanolab/1131343 to your computer and use it in GitHub Desktop.
benchmark of builtin filter function
# -*- coding: utf-8 -*-
from timeit import Timer
import random
import string
import sys
def redef_builtin_filter(pred, iterable):
"""redefined builtin filter function"""
ret = [x for x in iterable if pred(x)]
if isinstance(iterable, str) or isinstance(iterable, unicode):
return ''.join(ret)
elif isinstance(iterable, tuple):
return tuple(ret)
else:
return ret
setup="""
from __main__ import redef_builtin_filter, list_10percent_true, tuple_10percent_true,\\
ascii_str, unicode_str, select_true, select_under_ch_i, select_under_uni_ha
"""
itemsize = 100
list_10percent_true = [random.randint(0, itemsize) < itemsize/10 for x in range(itemsize)]
tuple_10percent_true = tuple([random.randint(0, itemsize) < itemsize/10 for x in range(itemsize)])
ascii_str = ''.join(random.choice(string.ascii_letters) for x in range(itemsize))
unicode_str = u'あいうえおかきくけこさしすせそたちつてとなにぬねの'
select_true = lambda x: x==True
select_under_ch_i = lambda x: ord(x) < ord('i')
select_under_uni_ha = lambda x: ord(x) < ord(u'は')
assert redef_builtin_filter(select_true, list_10percent_true) == filter(select_true, list_10percent_true)
assert redef_builtin_filter(select_true, tuple_10percent_true) == filter(select_true, tuple_10percent_true)
assert redef_builtin_filter(select_under_ch_i, ascii_str) == filter(select_under_ch_i, ascii_str)
assert redef_builtin_filter(select_under_uni_ha, unicode_str) == filter(select_under_uni_ha, unicode_str)
print 'python version : %s on %s' % (sys.version, sys.platform)
print ''
print 'list_10percent_true:'
print ' redef_builtin_filter ->', Timer(stmt='redef_builtin_filter(select_true, list_10percent_true)', setup=setup).timeit()
print ' builtin filter ->', Timer(stmt='filter(select_true, list_10percent_true)', setup=setup).timeit()
print ''
print 'tuple_10percent_true:'
print ' redef_builtin_filter ->', Timer(stmt='redef_builtin_filter(select_true, tuple_10percent_true)', setup=setup).timeit()
print ' builtin filter ->', Timer(stmt='filter(select_true, tuple_10percent_true)', setup=setup).timeit()
print ''
print 'ascii_str:'
print ' redef_builtin_filter ->', Timer(stmt='redef_builtin_filter(select_under_ch_i, ascii_str)', setup=setup).timeit()
print ' builtin filter ->', Timer(stmt='filter(select_under_ch_i, ascii_str)', setup=setup).timeit()
print ''
print 'unicode_str:'
print ' redef_builtin_filter ->', Timer(stmt='redef_builtin_filter(select_under_uni_ha, unicode_str)', setup=setup).timeit()
print ' builtin filter ->', Timer(stmt='filter(select_under_uni_ha, unicode_str)', setup=setup).timeit()
print ''
python version : 2.7.1 (4d824e4fcf57+, Aug 08 2011, 04:03:11)
[PyPy 1.6.0-dev1 with GCC 4.5.2] on linux2
list_10percent_true:
redef_builtin_filter -> 0.486375808716
builtin filter -> 15.1048140526
tuple_10percent_true:
redef_builtin_filter -> 1.58475995064
builtin filter -> 21.8717570305
ascii_str:
redef_builtin_filter -> 6.38133001328
builtin filter -> 25.1767168045
unicode_str:
redef_builtin_filter -> 1.97318696976
builtin filter -> 6.94378709793
-----/proc/meminfo
MemTotal: 8264940 kB
MemFree: 6293120 kB
Buffers: 113312 kB
Cached: 1364704 kB
SwapCached: 0 kB
Active: 1423476 kB
Inactive: 443656 kB
Active(anon): 389872 kB
Inactive(anon): 7528 kB
Active(file): 1033604 kB
Inactive(file): 436128 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 7475144 kB
HighFree: 5708268 kB
LowTotal: 789796 kB
LowFree: 584852 kB
SwapTotal: 4191228 kB
SwapFree: 4191228 kB
Dirty: 44 kB
Writeback: 0 kB
AnonPages: 389048 kB
Mapped: 121164 kB
Shmem: 8288 kB
Slab: 79180 kB
SReclaimable: 66876 kB
SUnreclaim: 12304 kB
KernelStack: 2784 kB
PageTables: 7656 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8323696 kB
Committed_AS: 1920288 kB
VmallocTotal: 122880 kB
VmallocUsed: 72108 kB
VmallocChunk: 47932 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 14328 kB
DirectMap2M: 899072 kB
-----/proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
stepping : 7
cpu MHz : 3274.067
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc pni ssse3 lahf_lm
bogomips : 6548.13
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
stepping : 7
cpu MHz : 3274.067
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
apicid : 1
initial apicid : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc pni ssse3 lahf_lm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment