使用cython加速耗时的列表操作

时间:2012-06-21 10:43:28

标签: python performance python-2.7 cython processing-efficiency

我有一个函数,它将numpy ndarray中表示的图像作为参数。 此ndarray由 list x list x list 项(行x像素x像素)组成,需要转换为列表 x 列表 x tuple 采用常规列表格式(因此不再是ndarray)。

因此,例如,此变量的内容可能看起来像

[[[0,0,0],[1,0,1],[2,4,5]],[[3,4,5],[1,7,4],[1,3,5]],[[2,4,2],[1,6,7],[1,9,0]]]

应该变成:

[[(0,0,0),(1,0,1),(2,4,5)],[(3,4,5),(1,7,4),(1,3,5)],[(2,4,2),(1,6,7),(1,9,0)]]

下面的(cython)代码段就是这样,但要完成1024x768的图像需要大约800ms。

import numpy as np
cimport numpy as np
DTYPE = np.int
ctypedef np.int_t DTYPE_t

def convertToBackdrop(np.ndarray arr3d):    
    agc = arr3d.swapaxes(0,1).tolist()
    agc = [map(tuple,line) for line in agc]
    return agc

我的问题是:在哪些方面我可以使这些代码更有效(时间)?我搜索了是否有列表的cdef,但没有找到任何线索。如果我想在100毫秒的完成时间内完成它,我希望我不是要求不可能的。提前感谢任何建议。

0 个答案:

没有答案