我定义了一个从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
从磁盘加载数据时非常烦人。有没有办法加快速度?
最佳答案
问题可能出在img_str += txn.get(key)
行。在Python中,您不应以这种方式连接大量字符串,这被认为是非常慢的。 This site显示了不同方法的基准。虽然该链接较旧,但仍假定大多数链接对当代Python版本有效。
因此,为了加快您的功能,您可以尝试使用以下表达式替换整个for
循环:
img_str = "".join([txn.get(key) for key in keys])
list comprehension替换
for
循环,对"".join()
的调用替换慢速字符串连接。