加速修改数组的numpy数组的循环

问题描述

我有形状为(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