相同的代码在函数外运行,但在函数内不起作用
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
。然后更改调用者以将结果分配给他们作为第一个参数传递的变量。
我有修改数组的函数:
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
。然后更改调用者以将结果分配给他们作为第一个参数传递的变量。