【发布时间】:2017-04-20 01:30:21
【问题描述】:
我需要帮助优化我的代码。这是有问题的卑鄙功能。
def FindAllNeighborCoords(cardinal_neighbor_array, principle_neighbor_array, width, height):
# Loop through every coordinate on the map.
for x in xrange(width):
for y in xrange(height):
# These if checks make sure the coordinate is in the map.
if x - 1 >= 0:
cardinal_neighbor_array[x, y].add((x - 1, y))
principle_neighbor_array[x, y].add((x - 1, y))
if y - 1 >= 0:
cardinal_neighbor_array[x, y].add((x, y - 1))
principle_neighbor_array[x, y].add((x, y - 1))
if y + 1 < height:
cardinal_neighbor_array[x, y].add((x, y + 1))
principle_neighbor_array[x, y].add((x, y + 1))
if x + 1 < width:
cardinal_neighbor_array[x, y].add((x + 1, y))
principle_neighbor_array[x, y].add((x + 1, y))
if x - 1 >= 0 and y - 1 >= 0:
principle_neighbor_array[x, y].add((x - 1, y - 1))
if x - 1 >= 0 and y + 1 < height:
principle_neighbor_array[x, y].add((x - 1, y + 1))
if x + 1 < width and y - 1 >= 0:
principle_neighbor_array[x, y].add((x + 1, y - 1))
if x + 1 < width and y + 1 < height:
principle_neighbor_array[x, y].add((x + 1, y + 1))
print cardinal_neighbor_array[20, 20]
set([20, 21), (21, 20), (19, 20), (20, 19)])
这个函数循环遍历地图上的每个人的坐标,找到周围邻居坐标的邻居并将它们保存到一个集合中。它搜索两种邻居类型 - 基数和本金。或者,4 和 8。每组都放置在一个二维数组中。然后,我可以通过执行诸如 cardinal_array[0, 0] 之类的操作来获取坐标的邻居,这将返回一组坐标。我希望这是有道理的!我在我的项目中使用了 TON 邻居,因此一次查找和存储它们比重复查找它们更快。我的引擎的很大一部分都使用这些邻居集,所以我宁愿加快它目前的工作方式,也不愿做出任何重大改变。这些集合由包含每个邻居的 (x, y) 坐标的元组组成。如果您有更好的解决方案,可以更改元组。此函数在地图生成期间调用一次,是迄今为止最慢的。
【问题讨论】:
标签: python performance numpy set