2016-11-20 247 views
0

我有一个numpy二维数组,我想运行一个函数,检查周围像素值是否低于给定值(起始值)。如果这是我试图运行这个像素和第一个值的递归函数 它适用于小数组,但对于一个大的我有内存错误。 我想知道是否有更好的方法来做到这一点。 结果我试图让numpy 2d数组满足这个标准的值。numpy二维数组递归

代码:

def check_neighbours(point_position, arr, water_level): 

    locs = [[-1, -1], [-1, 0], [-1, 1], [0, -1], 
      [0, 1], [1, 1], [1, -1], [1, 0]] 

    if point in self.checked_cells: 
     return True 

    self.checked_cells.append(point) 

    neighbours = [self.get_locs(x, point) for x in locs] 

    for i in neighbours: 
     n_point = arr[i[0], i[1]] 
     if n_point <= water_level: 
      check_neighbours(i, arr, water_level) 



check_neigbours([10,20], 2darray, 70) 
+0

请发布错误信息(完整追溯) – user7138814

+0

什么是“自我”? 'self.get_locs'? – hpaulj

+0

考虑对'checked_cells'使用'dtype = bool'数组(使用'numpy.zeros'预分配,其维度至少与'2darray'一样大)。 – wrwrwr

回答

0

感谢大家的见解。原来我正在寻找像flood fill algorithm这样的东西。 为了避免堆栈溢出,我不得不在while循环中使用队列。