我正在尝试编写一个函数来检查numpy数组中的无向渗透。在这种情况下,当存在某种液体可以遵循的路径时(液体可以向上、向下和侧向流动,但不能沿对角线)发生无向渗流。下面是一个可以提供给我们的数组的示例。在
1 0 1 1 0
1 0 0 0 1
1 0 1 0 0
1 1 1 0 0
1 0 1 0 1
在这种情况下,渗流的结果如下。在
^{pr2}$在上面的场景中,液体可能会沿着一条路径流动,除了位置[1,4]和[4,4]中的1之外,所有当前带有1的东西都会重新装满。在
我要写的函数从数组的顶部开始,检查它是否是1。如果它是1,它会将它写入一个新数组。接下来我要它做的是检查刚刚分配的1的上、下、左、右位置。在
我目前的情况如下。在
def flow_from(sites,full,i,j)
n = len(sites)
if j>=0 and j<n and i>=0 and i<n: #Check to see that value is in array bounds
if sites[i,j] == 0:
full[i,j] = 0
else:
full[i,j] = 1
flow_from(sites, full, i, j + 1)
flow_from(sites, full, i, j - 1)
flow_from(sites, full, i + 1, j)
flow_from(sites, full, i - 1, j)
在本例中,sites是原始矩阵,例如上面所示的矩阵。新的是被它的流矩阵所取代的矩阵。显示第二个矩阵。i和j用于迭代。在
每当我运行这个程序时,我都会收到一个错误,上面写着“RuntimeError:maximum recursion depth exceeded in comparison”。我仔细研究了这个问题,认为我不需要调整递归限制,但我有一种感觉,我的代码中有一些明显的东西是我看不到的。有什么建议吗?在
忘了你的代码块。这是scipy库中已知解决方案的已知问题。从这个answer改编代码,并假设您的数据在一个名为
A
的数组中。在这样可以得到:
^{pr2}$也就是说,它为你标记了所有的“簇”,并确定了大小!从这里可以看到,标记为3和4的簇的大小为1,这是您要过滤掉的。这是一种更强大的方法,因为现在您可以过滤任何大小的内容。在
相关问题 更多 >
编程相关推荐