我有1D numpy数组的bool代表NxN矩阵(例如,10x10矩阵的值为0到9,然后是10到19,等等) 我的目标是找到' true'相邻的元素 - 上,下,左,右或对角线。
我解决这个问题的计划是迭代数组(对于my_array中的x)以及当一个' true'遇到元素,输入周围元素的搜索模式。如果其中一个周围元素也为真,则会搜索其周围的元素。但是,我不确定这是否是优化搜索,并且递归地实现它证明是困难的。
有关搜索1D numpy数组中相邻元素的算法或方法的建议吗?
编辑:
因为深度优先搜索我已经看过使用字典来设置元素之间的路径,我尝试创建一个函数来定义它(下面)。
我简化它只考虑左,右,上,下(没有对角线),但边缘情况不起作用。
有了这个,我希望使用深度优先搜索功能,当一个真正的'真正的'找到元素。
def getgraph(lst):
#print('here2')
for x in lst:
if x is 0:
graph[x] = set([x+1, x+n])
x = x+1
while (x > 0) and (x < (n-1)): #first row, excluding edges
graph[x] = set([(x-1),(x+1),(x+n)])
x= x+1
while x >= (n-1) and x < ((n-1)*n): #second to second last row, with edge cases
v = x%n
width = n-1
print('XN: %f' %v)
if (x % n) == 0:
graph[x] = set([x+1, x+n])
x = x+1
if (v) is width:
graph[x] = set([(x-1),(x+n)])
x = x+1
else:
graph[x] = set([(x-1), (x+1), (x+n), (x-n)])
x= x+1
while x >= (n-1)*n and x <= ((n*n)-1):
value = ((n*n)-1)
if x is value: # works with manually inputting last element number
graph[x] = set([(x-1),(x-n)])
x = x+1
else:
graph[x] = set([(x-1),(x+1),(x-n)])
x= x+1
print(graph)
return graph
答案 0 :(得分:0)
您描述的问题在图像处理中称为“连接组件标记” - 您只需要一维数组而不是矩阵(顺便提一下,这是过去图像处理的常见情况)。
如果您转换为2D数组,则可以应用scipy.ndimage.measurements.label(docs)(例如,如本answer中所述)
如果您仍想自己实施,a 2-pass algorithm被称为标准解决方案。许多其他见解in this other answer。