索引 numpy 数组的最后一个维度

indexing the last dimension of numpy array

我有两个图像,分别称为 image 和 mask,具有以下形状:

image shape: (876, 1020, 3)
mask shape: (876, 1020)

我想要做的是将图像的三个元素中的每一个与掩码非零的掩码相除。所以,我这样做:

import numpy as np

index = np.nonzero(mask)
image[index, :] = image[index, :]/mask[index]

然而,这会导致程序花费很长时间,然后失败;

ValueError:操作数无法与形状一起广播 (2,302793,1020,3) (302793,)

如果创建掩码副本没有内存问题,可以将零元素设置为1并直接除以:

mask2 = mask.copy()
mask2[mask2==0]=1
image /= mask2[...,np.newaxis]