我正在尝试实现与此问题类似的目标。目标是计算至少有两个直接邻居(上、下、左、右)的 1 的数量,与我的版本的唯一区别是序列中必须至少有一个十字或角。
例如,
array([[0, 0, 0, 0, 0, 1],
[0, 1,*1, 1, 0, 0],
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[1, 1, 0, 1, 1, 0],
[1, 0, 0, 0, 1, 0]])
星号 *1 不算,因为它的邻居没有形成角或十字。右上角 1 也没有,因为它没有两个邻居。答案是 2(右下和左下)。
这是我尝试过的:
import numpy as np
a = np.zeros((6,6), dtype=np.int)
a[0,5] = 1
a[1,1] = a[1,2] = a[1,3] = 1
a[4,4] = a[5,4] = a[4,3] = 1
a[3,0] = a[4,0] = a[5,0] = a[4,1] = 1
from scipy import ndimage
kernel = ndimage.generate_binary_structure(2, 1)
kernel[1, 1] = 0
b = convolve(a, kernel, mode="constant")
c = b[a>0]
# At least 2 neighbours
return len(c[c >= 2])
但它仍然从第二行计算星号 *1(返回 3 而不是 2)!
谢谢你的帮助!