python - NumPy 数组的转换在数千次循环后变慢

标签 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

从磁盘加载数据时非常烦人。有什么办法可以加快速度吗?

最佳答案

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

因此,为了加速您的函数,您可以尝试用以下表达式替换整个 for 循环:

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

list comprehension替换了 for 循环,并且对 "".join() 的调用替换了缓慢的字符串连接。

关于python - NumPy 数组的转换在数千次循环后变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40735984/

相关文章:

python - 小部件从 QTreeview 中消失

python - BeautifulSoup 连接单词

python - 将图像数据转换为 3D

python - 从 python 中具有固定数量元素的集合中进行非常快速的采样

python - 分割 Seaborn fiddle 图表中的控制面

Python Numpy nan_to_num 帮助

python - 当数组数据类型和格式说明符不匹配时,如何将数组堆栈保存到 .csv?

Python3 Pillow 获取一条线上的所有像素

python - 生成倾斜正弦波的图像

Python:如何生成在随机位置具有非零条目的向量?