问题描述
我有形状为(X,Y,4)的numpy数组,其中X和Y大。我想在数组的轴2上执行以下操作(即,对于每个x和y为A [x,y]):对于每个一维向量A [x,y],如果前三个元素中的每个为到常数向量C中对应元素的距离d以内,然后将第4个元素设置为0。这就是我使用Python循环的方法:
for i in range(X):
for j in range(Y):
if np.all(np.abs(A[i,j,0:3] - C) <= d):
A[i,3] = 0
显然,这些循环非常慢。我怀疑有一种更快的,基于ufunc的方法可以执行此操作,但是对我而言,我一生都不知道该怎么做。有人有建议吗?
(应用注意事项:这是向图像添加alpha通道,以使接近C的颜色变为透明。)
解决方法
尝试:
mask = (np.abs(A[:,:,:3]-C)<=d).all(-1)
A[mask,3] = 0