我有一个 numpy 数组,由 20,000 个 RGB 图像组成,每个图像的像素为 220x220。因此,数组 的X_data形状为(20000, 220, 220, 3)。
我正在寻找最快的方法来查找整个数据集中的最小和最大像素值。我知道这种类型的任务需要时间,因为我正在搜索大约 30 亿个像素值,但我希望改进我已经找到的解决方案;以下是:
对结果数组使用np.flattenand 然后:np.minnp.max
flat = X_data.flatten()
np.min(flat)
np.max(flat)
Run Code Online (Sandbox Code Playgroud)
此方法总共花费了 13 分 11 秒(墙上时间)来查找最小值和最大值。
使用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])])
Run Code Online (Sandbox Code Playgroud)
此方法总共花费了 8 分钟(墙上时间)。
有没有更快的方法来完成这项任务?
我忘记在问题的原始表述中提到,我希望它适用于尚未重新缩放的图像数据集,即包含不同大小图像的图像数据集。这意味着使用np.minandnp.max将不起作用,即使它比上述选项更快。
非常感谢!