为什么python中的数组填充速度慢

时间:2014-05-29 07:33:26

标签: python python-3.x

我有一个循环遍历图像的python代码并将它们复制到RGBA格式的数组中,但代码速度非常慢,每个256x256的10个图像处理时间超过5分钟,任何想法如何改进此代码?

self.pixelsArray = array('B')

def extractPixelsFromImage(self):
    pixels = self.image.pixels 
    for y in range(self.height):
        for x in range(self.width):

            i = (x + (self.height-1-y)*self.width) * 4

            r = int (max (0, min (255, 255 * pixels [i    ])))
            g = int (max (0, min (255, 255 * pixels [i + 1])))
            b = int (max (0, min (255, 255 * pixels [i + 2])))
            a = int (max (0, min (255, 255 * pixels [i + 3])))

            self.pixelsArray.append(r)
            self.pixelsArray.append(g)
            self.pixelsArray.append(b)
            self.pixelsArray.append(a)

2 个答案:

答案 0 :(得分:3)

您可以做一点改进,而不是追加四次 r g b a 到数组,创建一个列表并使用extend方法,如下所示:

self.pixels_array = array('B')

def extract_pixels_from_image(self):
    pixels = self.image.pixels 
    for y in range(self.height):
        for x in range(self.width):

            i = (x + (self.height - 1 - y) * self.width) * 4

            r = int(max(0, min(255, 255 * pixels[i])))
            g = int(max(0, min(255, 255 * pixels[i + 1])))
            b = int(max(0, min(255, 255 * pixels[i + 2])))
            a = int(max(0, min(255, 255 * pixels[i + 3])))

            self.pixels_array.extend([r, g, b, a])

很抱歉更改您的命名风格,只是不要在变量和方法名称中使用驼峰大小写样式不是 pythonic

答案 1 :(得分:0)

我要尝试的第一件事就是用range替换xrange,只要你不需要内存中的整个数组。

  
      
  • 范围创建一个列表,因此如果你执行范围(1,10000000),它会在内存中创建一个包含10000000个元素的列表。

  •   
  • xrange是一个懒惰评估的序列对象。

  •   

source