Python 优化NumPy遍历图像并更改值

Python 优化NumPy遍历图像并更改值,python,numpy,Python,Numpy,有没有办法优化这段代码?以我当前的im值计算,需要约28秒。我想知道我是否可以减少这次 im = output_image[-min_xy[1]:-min_xy[1] + image_2.shape[0], -min_xy[0]:-min_xy[0] + image_2.shape[1]] for idx, rk in enumerate(im): for ix, k in enumerate(rk): image_2[idx][ix] = avg

有没有办法优化这段代码?以我当前的im值计算,需要约28秒。我想知道我是否可以减少这次

im = output_image[-min_xy[1]:-min_xy[1] + image_2.shape[0], -min_xy[0]:-min_xy[0] + image_2.shape[1]]
    for idx, rk in enumerate(im):
        for ix, k in enumerate(rk):
            image_2[idx][ix] = avg(im[idx][ix], image_2[idx][ix])
typeimage_2和typeim为

im.shape和image_2.shape是23863200,3

我的avg所做的是


注:a1是一个大小为3的数组,例如:数组[0.68627451,0.5372549,0.4745098]

矢量化的唯一障碍似乎是,如果在平均值中有条件,要克服它,只需使用np.where的选择功能,这样我们的解决方案就是这样的-

avgs = (im + image_2)/2.0
image_2_out = np.where((im == 0).any(-1,keepdims=1), image_2, avgs)
请注意,这假设a1中的if[0,0,0.]表示要检查任何一个匹配项。如果要检查所有零,只需使用.ALL而不是.any

或者,要在图像_2中进行原位编辑,请使用用于布尔索引的掩码-


尝试查看您的算法是否与任何矩阵变换或运算类似?在a1中使用if[0,0,0.]检查a1中是否有人为零。你确定要这样做吗?@Liondancer这没有回答我的问题,我的问题是-a1:中的if[0,0,0.],你是想检查a1中的所有元素都是零还是a1中的任何一个元素都是零?@Divakar如果a1中的所有元素都是零,对不起
avgs = (im + image_2)/2.0
image_2_out = np.where((im == 0).any(-1,keepdims=1), image_2, avgs)
mask = ~(im == 0).any(-1)
image_2[mask] = avgs[mask]