【发布时间】:2016-02-25 04:02:25
【问题描述】:
我正在尝试编写一个函数来检查 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
在这种情况下,渗滤的结果如下。
1 0 1 1 0
1 0 0 0 0
1 0 1 0 0
1 1 1 0 0
1 0 1 0 0
在上面的场景中,液体可以沿着一条路径流动,除了位置 [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:比较中超出了最大递归深度”。我调查了这个,我认为我不需要调整我的递归限制,但我觉得我的代码有一些明显的东西我只是看不到。任何指针?
【问题讨论】:
-
我猜你不止一次访问单元格,所以你进入了一个无限循环。
标签: python arrays numpy recursion