如何高效从三维NumPy/Dask数组生成一维掩码筛选图像?
优化三维数组全True掩码的生成方式
你可以一次性指定多个轴给all()方法,不用连续调用两次。不管是NumPy还是Dask,都支持传入轴的元组来实现多维度的逻辑判断,这样能减少一次中间数组的生成,效率更高。
假设你的数组形状是(num_samples, height, width)(对应1592张图像,每张是height×width的二维数组),把原来的代码:
mask = a.all(axis=1).all(axis=1)
替换成:
mask = a.all(axis=(1, 2))
axis=(1,2)会沿着高度和宽度两个维度做全True判断,直接得到一维的掩码数组,每个元素对应一张图像是否全为True。
后续筛选文件名的逻辑可以保持不变,比如要保留包含False的图像(即剔除全True的),可以这样做:
keep_indices = np.where(~mask)[0] filtered_filenames = [filenames[i] for i in keep_indices]
Dask的all()方法完全兼容这个用法,而且因为避免了中间数组的创建与计算,处理大数组时能减少内存开销、提升计算速度,很适合你这种1500+张图像的场景。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

