我有以下的二维数组
regions = array([[3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4],
[3, 3, 3, 3, 8, 8, 8, 8, 8, 4, 4, 4, 4],
[3, 3, 3, 3, 8, 8, 8, 8, 8, 4, 4, 4, 4],
[3, 3, 3, 3, 8, 8, 8, 8, 8, 4, 4, 4, 4],
[3, 6, 6, 6, 8, 8, 8, 8, 8, 7, 7, 7, 4],
[3, 6, 6, 6, 8, 8, 8, 8, 8, 7, 7, 7, 4],
[3, 6, 6, 6, 6, 8, 8, 8, 7, 7, 7, 7, 4],
[3, 6, 6, 6, 6, 2, 2, 2, 7, 7, 7, 7, 4],
[5, 6, 6, 6, 6, 2, 2, 2, 7, 7, 7, 7, 1],
[5, 6, 6, 6, 6, 2, 2, 2, 7, 7, 7, 7, 1],
[5, 6, 6, 6, 6, 2, 2, 2, 7, 7, 7, 7, 1],
[5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1],
[5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]])
我希望能够为所有的数字找到相邻的数字。例如, 3
是 4,5,6,8
的相邻数字。目前我正在使用以下代码来完成这个练习。
for
循环numbers = scipy.unique(regions)
for i in numbers:
index = i-1
slices = scipy.ndimage.find_objects(regions)
sub_im = regions[slices[index]]
im = sub_im == i
neighbors = scipy.ndimage.binary_dilation(input=im, structure=disk(1))
neighbors = neighbors*sub_im
neighbors_list = scipy.unique(neighbors)[1:] - 1
print (neighbors_list)
问题是我不想使用for循环,因为我的区域数组有数百万个。有没有快速解决此问题的方法,而不需要使用for循环?