Numpy:将2D索引数组转换为1D数组以进行交集计算

时间:2016-11-28 04:11:19

标签: python arrays numpy

我有一种情况需要在python中进行两个二进制图像数组的交集。理想情况下,我很快就这样做了。

Numpy有intersect1d函数可以完成这项工作,如果我可以将我的坐标转换为单个元素。

现在(因为我知道我的照片的尺寸),我通过使用乘法,求和,交叉将所有内容转换为整数格式来实现技巧...然后使用类似的方法解压缩。

def npimg_intersection(A,B):
    Aargwhere = np.argwhere(A==0)
    Bargwhere = np.argwhere(B==0)

    Aargwhere[:,0] = Aargwhere[:,0]*1000
    Aargwhere = np.sum(Aargwhere,axis=1)

    Bargwhere[:,0] = Bargwhere[:,0]*1000
    Bargwhere = np.sum(Bargwhere,axis=1)

    Iargwhere0 = np.intersect1d(Aargwhere,Bargwhere)

    Iargwhere = np.zeros(shape=(Iargwhere0.shape[0],2),dtype=Iargwhere0.dtype)
    Iargwhere[:,0] = Iargwhere0[:]/1000
    Iargwhere[:,1] = Iargwhere0[:]%1000


    I = np.zeros(shape = A.shape,dtype=A.dtype)
    I[:,:] = 255
    I[Iargwhere[:,0],Iargwhere[:,1]] = 0
    return I

它有效。相当快。

但是使用numpy这样做的正确(较少黑客)方式是什么?

1 个答案:

答案 0 :(得分:1)

可以建议两种方法 -

255*(~((A==0) & (B==0))).astype(A.dtype)
255*(((A!=0) | (B!=0))).astype(A.dtype)