def with_walking(time_arr, mins_per_square=1.3, transfer_constant=5):
arr = time_arr.copy()
cross_footprint = sp.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]]).astype(bool)
diag_footprint = sp.array([[1, 0, 1],[0, 1, 0], [1, 0, 1]]).astype(bool)
arr[sp.isnan(arr)] = sp.inf
for i in range(60):
cross_arr = sp.ndimage.minimum_filter(arr, footprint=cross_footprint)
cross_arr[sp.isnan(cross_arr)] = sp.inf
cross_changes = (cross_arr != arr)
cross_arr[cross_changes] += 1*mins_per_square
diag_arr = sp.ndimage.minimum_filter(arr, footprint=diag_footprint)
diag_arr[sp.isnan(diag_arr)] = sp.inf
diag_changes = (diag_arr != arr)
diag_arr[diag_changes] += 1.4*mins_per_square
arr = sp.minimum(cross_arr, diag_arr)
arr[sp.isinf(arr)] = sp.nan
return arr + transfer_constant
评论列表
文章目录