0

我有一个函数,它将 numpy ndarray 中表示的图像作为参数。此 ndarray 由一个列表x列表x列表项(行 x 像素 x 像素)组成,需要转换为常规列表格式的列表x列表x元组(因此不再作为 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 的图像需要大约 800 毫秒。

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 毫秒的完成时间内完成它,我希望我不是在要求不可能的事情。在此先感谢您的任何建议。

4

0 回答 0