数千个循环后,NumPy数组的转换变慢

时间:2016-11-22 07:23:43

标签: python numpy

我定义了一个从lmdb文件加载图像数据并减去平均值的函数,但是这个函数在经过数千次循环后从0.1s变​​慢到1.0s。

def load_image(lmdb_file, keys, im_size, pixel_means):
    img_str = ''
    env = lmdb.open(lmdb_file, readonly=True)
    with env.begin() as txn:
        for key in keys:
            img_str += txn.get(key)
    env.close()
    img_data = np.fromstring(img_str, dtype=np.uint8).astype(np.float32)
    img = np.reshape(img_data, [len(keys), im_size[0], im_size[1], 3])
    img -= pixel_means
    return img

从磁盘加载数据时非常烦人。有没有办法加快速度?

1 个答案:

答案 0 :(得分:2)

问题可能在于行img_str += txn.get(key)。在Python中,你不应该以这种方式连接大量字符串,它被认为是非常慢的。 StackOverflow显示了不同方法的基准。虽然链接相当陈旧,但大多数仍被认为对当代Python版本有效。

因此,为了加快您的功能,您可以尝试用此表达式替换整个for循环:

img_str = "".join([txn.get(key) for key in keys]) 

This site取代了for循环,对"".join()的调用取代了慢速字符串连接。