相同的代码在函数外运行,但在函数内不起作用

The same code is working outside a function, but not within a function

我有修改数组的函数:

import numpy as np
import skimage.draw as dw
import skimage.segmentation as seg

def draw_territories(map_file,system_list,color_dict):
    for size in range(0,120,1):
        for system in system_list:
            rr,cc = dw.circle_perimeter(system.x_coord,system.y_coord,size, method="andres", shape=(map_file.shape))
            map_file[rr,cc] = np.where(map_file[rr,cc]==(255,255,255),color_dict[system.owner_ID],map_file[rr,cc])

    ## This is where I want to add code ##

    borders = (seg.find_boundaries(map_file[:,:,0],mode='thick')) 
    map_file[borders] = 0
    return None

map_file 数组表示一个 4000x4000 的地图,第三维表示 RGB 颜色。它通过在地图上占用的位置(从 system_list)周围绘制越来越大的彩色圆圈(通过循环)来工作,颜色取决于字典 color_dict。然后它在领土周围绘制边界。所有这些都已确认有效。

我现在正尝试在上述代码块中的哈希值处添加以下行。

    map_file = np.where(map_file==[254,254,254],[255,255,255],map_file)

[254,254,254]是未被占用的点的替代色,我想在绘制边框之前将其还原为背景白色。

出于某种原因,添加的行在函数内根本没有任何作用,并且后面的两行也停止工作。然而,如果我 运行 它们在函数之外而不是在函数之内,则所有三个都按预期工作。为什么会发生这种情况,我该如何解决?

您正在分配给局部变量,而不是调用者的变量。

如果你想就地覆盖数组,分配给map_file[...]

map_file[...] = np.where(map_file==[254,254,254],[255,255,255],map_file)

但是您可以使用 return map_file 而不是 return None。然后更改调用者以将结果分配给他们作为第一个参数传递的变量。