最近,在这个线程中,我在Jon Clements的帮助下发现以下代码具有非常不同的执行时间。
你有任何想法为什么会出现这种情况吗?
评论:self.stream_data是一个由许多零和int16值组成的向量元组,create_ZS_data方法正在执行所谓的ZeroSuppression。
环境
输入:许多(3.5k)小文件(每个约120kb)
操作系统:Linux64
Python版本:2.6.8
基于生成器的解决方案:
def create_ZS_data(self):
self.ZS_data = ( [column, row, self.stream_data[column + row * self.rows ]]
for row, column in itertools.product(xrange(self.rows), xrange(self.columns))
if self.stream_data[column + row * self.rows ] )
性能分析信息:
ncalls tottime percall cumtime percall filename:lineno(function)
3257 1.117 0.000 71.598 0.022 decode_from_merlin.py:302(create_ZS_file)
463419 67.705 0.000 67.705 0.000 decode_from_merlin.py:86(<genexpr>)
Jon的解决方案:
create_ZS_data(self):
self.ZS_data = list()
for rowno, cols in enumerate(self.stream_data[i:i+self.columns] for i in xrange(0, len(self.stream_data), self.columns)):
for colno, col in enumerate(cols):
# col == value, (rowno, colno) = index
if col:
self.ZS_data.append([colno, rowno, col])
分析器信息:
ncalls tottime percall cumtime percall filename:lineno(function)
3257 18.616 0.006 19.919 0.006 decode_from_merlin.py:83(create_ZS_data)