我的代码运行得太慢了。
returnMask = []
for curPage in range(numPages):
print curPage
curPageAddr = curPage + startPage
cumMask = np.ones((numBytes)).astype(int) * 0xff
for maskFunction, maskAction in maskPattern:
#maskArgs['funcArgs']['startPage'] = curPageAddr
#maskArgs['funcArgs']['numPages'] = 1
inputArgs['funcArgs']['startPage'] = curPageAddr
inputArgs['funcArgs']['numPages'] = 1
curMaskName, curMaskData = maskFunction(inputArgs)
if (maskAction == 'include'):
maskIn = np.array(curMaskData).astype(int)
if (maskAction == 'exclude'):
maskIn = (~np.array(curMaskData).astype(int)) & 0xff
cumMask = cumMask & maskIn
print "cumMask size %d" % len(cumMask)
returnMask += cumMask.astype(int).tolist()
基本上,我的外部for循环循环2000次,每次都将一个2048字节的列表附加到returnMask中。我以为我可以使用Cython,将returnMask更改为动态分配的c数组,这可能有助于加快我的代码。谁能告诉我这是否是解决这个问题的好方法?
答案 0 :(得分:0)
很难说 - 它有多慢(以秒为单位)?
我的第一个猜测是你的maskFunction
一直在服用。
其次,np.array().astype()
将两个都很慢的函数链接在一起,并且运行~
是第三个函数。然后你的外圈有astype
和tolist
,它们都很慢。在Cython中做这些事情是你真正看到改进的地方。
我真的怀疑range
和print
正在占用大量时间。
您是否测量过瓶颈?我通常会围绕各种函数进行一些time.time()
调用,并在整个循环中进行平均调整:
dt = np.zeros( (len(loop),) )
for i in loop:
t = time.time()
slow_function()
dt[i] = time.time() - t
print "avg. time for slow_function was %.3f s" % dt.mean()