由买买提看人间百态

topics

全部话题 - 话题: timeit
(共0页)
f**********d
发帖数: 4960
1
来自主题: Programming版 - python 的 timeit 问题
想用timeit测量一个dictionary读取速度。
timeit.Timer('d[key]')总是报错说不认识d.d是我程序中定义的字典。
有人搞过这个么?
j********x
发帖数: 2330
2
来自主题: Programming版 - 转一篇范文
我们来比较一下三种写法,我来阐述一下为什么 A最好,C最烂。
A. 初始化成[]然后“笨拙地”逐个append/extend
B. list(chain(*d.iteritems()))
C. list(sum(d.items(),()))


首先,跟 B 和 C 这样的 one liner 相比,A 这种看起来最“笨拙”、
似乎不怎么 "idiomatic" 的写法,实际上理解起来最容易,
几乎没有什么沟通成本和心智负担。

当然 itertools.chain 也是比较直观的,心智负担也不大。

而 sum(d.items(),()) 的问题,首先在于你要意识到 sum 函数第二个参数的存在,
而且这个参数的默认值是整数0,而不是 None, '', (), [], {} 或 set()。
这给大多数阅读代码的人带来了心智负担,降低了理解速度。


其次,我们来看看执行效率。

下面 benchmark 结果显示,在原 dict 稍大时,
裸写 []-extend 最快,chain 稍次之,sum 则完全不能忍受
——因为累加过程中无谓地生成了很多临时tuples,... 阅读全帖
t****a
发帖数: 1212
3
来自主题: JobHunting版 - Solve sudoku in parallel
顺便测试了一下python做fib的性能(single thread)
def fib(n):
if n < 2:
return(n)
else:
return(fib(n-1)+fib(n-2))
import timeit
print timeit.timeit("fib(36)", number=1, setup="from __main__ import fib")
速度大约是clojure single thread的10%
a****e
发帖数: 9589
4
来自主题: Programming版 - python question
最先想到re,然后是mod(%),range 想的妙(佩服),textwrap 从未接触过(学习
了),其他的从直觉上觉得效率不高,pass了。
写了个测试程序如下:
import timeit
s = "0001001101111111"
def mtimeit(func):
def wrap(*args, **kwargs):
t = timeit.Timer(func)
print func.func_name,
print min(t.repeat(number=1))
return func
return wrap
@mtimeit
def re_func():
import re
return '-'.join(re.findall('\d{4}', s))
@mtimeit
def mod_func():
return ''.join(x if i%4 or i==0 else '-'+x for i,x in enumerate(s))

@mtimeit
de... 阅读全帖
x******a
发帖数: 6336
5
来自主题: Programming版 - 请教一个python(pandas)的效率问题
我有一个MultiIndex的pandas DataFrame df
df.shape=(3000, 800)
1. %timeit df.groupby(level=['a','b']).aggregate(scipy.stats.nanmedian)
的结果是best of 3: 39.9 s per loop
2. %timeit df.groupby(level=['a', 'b']).median()
的结果是best of 3: 113 ms per loop
差了大概400倍。
我想要用一个自己定义的函数winsorized_mean.试了第一种,best of 3: 1 min 41s
per loop.请问可以怎么改进?
多谢!
m********5
发帖数: 17667
6
来自主题: Programming版 - python question
因为import, dot操作等消耗的时间远超过其他步骤
所以我觉得有必要修改一下,直接把reptfda用在测试func中
import re
rept=re.compile('\d{4}')
reptfda=rept.findall
为了 eliminate global var lookup overhead 的影响,应该多尝试几次 number=1应
该是不行的。
修改了一下:
def testAthome2(s,niter):
import re
rept=re.compile('\d{4}')
reptfda=rept.findall
def mtimeit(func):
def wrap(*args, **kwargs):
t = timeit.Timer(func)
print func.func_name,
print min(t.repeat(number=niter))
return func
return ... 阅读全帖
m********2
发帖数: 89
7
来自主题: Programming版 - 学python的一点小感觉哈
"200多m的dic" 是只200 million k-v entries ? 才用1.45g内存 ? 不可能吧? 平均
一个k-v entry才不到 8 bytes ?
在我的x230, 16GB mem 上跑 200 million entries dict 会 page reclaim thrashing.
跑 100 million entries 的 dict 没问题:
# t.py
def t(n):
d = { i:i for i in range(n) }
print( hex(d[n-1]) )
python3 -m timeit -n 2 -r 1 -s 'import t' 't.t(100*2**20)'
2 loops, best of 1: 10.7 sec per loop
今天有点但疼:)
d********t
发帖数: 9628
8
来自主题: Programming版 - python 的 timeit 问题
你的key是自定义class吧,得Hash
C*******a
发帖数: 448
9
来自主题: Programming版 - python 的 timeit 问题
不是,key是一个string
(共0页)