[英]How can I speed up iteration through this transformed numpy array?
以下是要使用pyglet渲染的2D等距图块地图的局部类定义。
class Map(object):
origin = 0
drytile = tile.dry
wettile = tile.wet
def __init__(self, left=8, right=8):
self.grid = np.array(([None] * left, [None] * right), dtype=object)
self._setup_grid()
def __iter__(self):
"""return tiles in the order in which they should be rendered"""
# get number of diagonals
ndiags = (np.max(self.grid.shape) * 2) -\
(1 + (np.max(self.grid.shape) - np.min(self.grid.shape)))
# get iterator to go through diagonals in back-to-front order
offsets = xrange(-(ndiags / 2), ndiags / 2 + 1)
# iterate in render order
for off in offsets:
for tile in np.flipud(self.grid).diagonal(off)[::-1]:
yield tile
如下图所示,这些图块需要从头到尾渲染:
在我的类定义中,原点是指最上面的图块(图块a
),因此,该类中定义的left
维度是沿[abdg]
的向量,而right
维度是沿[acfj]
的向量。
这是我的应用程序中至关重要的部分,因为我打算渲染大量的图块。 有没有一种更快的方法可以按指定顺序遍历图块? 可以消除嵌套循环的帮助吗?
非常感谢!
我将首先订购数据结构。 如果订购向量,则迭代将更快。
通常,使用有序数据结构对这种情况有好处。
如果出于任何原因要操纵结构,则需要执行“有序插入”或删除,这比较慢。 使用有序数据结构的权衡是在插入和移除上,并且由于电路板的变化不大,因此看起来只有使用有序数据结构才可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.