【发布时间】:2020-10-23 16:09:22
【问题描述】:
我有一个 numpy 数组,由 20,000 个 220x220 像素的 RGB 图像组成。因此,数组X_data 的形状为(20000, 220, 220, 3)。
我正在寻找找到整个数据集的最小和最大像素值的最快方法。我很欣赏这种类型的任务需要时间,因为我正在搜索大约 30 亿个像素值,但我希望改进我已经找到的解决方案;分别是:
选项 1:展平数组
在结果数组上使用np.flatten,然后使用np.min 和np.max:
flat = X_data.flatten()
np.min(flat)
np.max(flat)
这个方法总共花了 13 分 11 秒(墙上时间)来找到最小值和最大值。
选项 2:列表理解
使用np.amin 和np.amax 查找每个图像的最小值和最大值,将它们附加到一个列表中,然后找到该列表的最小值和最大值:
min_val = np.min([np.amin(X_data[i]) for i in np.arange(X_data.shape[0])])
max_val = np.max([np.amax(X_data[i]) for i in np.arange(X_data.shape[0])])
这个方法总共花了 8 分钟(墙上时间)。
有没有更快的方法来完成这个任务?
编辑:
我忘记在问题的原始表述中提到我希望它适用于尚未重新缩放的图像数据集,即包含不同大小图像的图像数据集。这意味着使用np.min 和np.max 将不起作用,即使它比上述选项更快。
非常感谢!
【问题讨论】:
-
你有一个像样的多核CPU吗?你运行什么操作系统?
-
我正在使用现成的 MacBook Air 2020,运行 Catalina 和 1.6 GHz 双核 Intel Core i5。
-
那么你的意思是你的开场白是不正确的...... “图像是 220x220 每个”?
-
“未重新缩放的图像数据集,即包含不同大小图像的数据集”与它有什么关系?为什么不包括
np.min和np.max? -
我想可以通过同时计算最小值和最大值来查找 np.min/np.max 的来源并保存另一个因子 2。只需为自己编写一个 np.minmax 函数即可。
标签: python arrays numpy image-processing