首页 > 解决方案 > Numpy:查找相邻元素至少有一个零的最有效方法(“边缘”)

问题描述

假设我有一个像这样的 numpy 数组:

np.array([[0, 0, 0, 0, 0],
          [0, 1, 0, 0, 0],
          [1, 1, 1, 0, 0],
          [2, 2, 2, 1, 0],
          [3, 3, 3, 2, 1]])

如何获得与其相邻的零正交值的索引?正交我的意思是它不会查看对角相邻的项目。例如,输出应该是:

np.array([[1, 1], [2, 0], [2, 2], [3, 3], [4, 4]])

标签: pythonnumpy

解决方案


明显的方法有什么问题吗?

mask = arr == 0
out = np.zeros(mask.shape, dtype='bool')

out[:-1] = out[:-1] | mask[1:]
out[1:] = out[1:] | mask[:-1]
out[:,:-1] = out[:,:-1] | mask[:,1:]
out[:,1:] = out[:,1:] | mask[:,:-1]

np.argwhere(out & (arr!=0))

推荐阅读